首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

JPA 注脚(一)

2012-10-21 
JPA 注解(一)1、@Entity(nameEntityName)????? 表示该类是一个可持化的实体。当在容器中时,服务器将会首

JPA 注解(一)

1、@Entity(name="EntityName")

????? 表示该类是一个可持化的实体。当在容器中时,服务器将会首先加载所有标注了@Entity注释的实体类,其中@Entity中的“name”属性表示实体名称,若不作设置,默认为标注实体类的名称(注意大小写与系统的关系。)。 @Entity标注是必需的 ,name属性为可选。?

?以上的@Table注释表示指定数据库名“test”,表名为“tb_contact”,并创建了两组唯一索引。


3、@Column

??????? @Column标记表示持久化属性映射表中的字段。此标记可以标注在Getter方法或属性前。

如标注在属性前

? 生成的SQL脚本为

分类类型Java的基本数据类型byte、int、short、long、boolean、char、float、doubleJava的基本数据类型对应的封装类Byte、Int、Short、Long、Boolean、Character、Float、Double字节和字符型数组byte[]、Byte[]、char[]、Character[]大数值类型

java.math.BigInteger

java.math.BigDecimal字符串类型java.lang.String日期时间类型

java.util.Date

java.util.Calendar

java.sql.Date

java.sql.Time

java.sql.Timestamp枚举型用户自定义的枚举型Entity类型标注为@Entity的类包含Entity类型的集合Collection类

java.util.Collection

java.util.Set

java.util.List

java.util.Map嵌入式(embeddable)类

?Java数据类型与数据库中的类型转换是由JPA实现框架自动转换的,所以不同的JPA实现框架转换的规则也不太一样。

???? 例如MySQL中,varchar和char类型都转化为String类型。Blob和Clob类型可以转化成Byte[]型。由于类型转化是JPA底层来实现的,这就遇到一个问题,很有可能在将表中的数据转换成Java的数据类型时出现异常。

?????? 我们知道对于可以持久化的Java类型中,即可以映射基本的数据类型,如byte、int、short、long、boolean、char、float、double等,也可以映射成Byte、Int、Short、Long、Boolean、Character、Float、Double类型。那么选择哪种类型比较合适呢?

举下面的例子进行说明。

?

5、@Id

?????? 主键是实体的唯一标识,调用EntityManager的find方法,可以获得相应的实体对象。每一个实体类至少要有一个主键(Primary key)。

?????? 一旦使用@Id标记属性为主键,该实体属性的值可以指定,也可以根据一些特定的规则自动生成。这就涉及另一个标记@GeneratedValue的使用。

?????? @GeneratedValue标注有以两个属性:

?????? (1)strategy属性表示生成主键的策略,有4种类型,分别定义在枚举型GenerationType中,其中有GenerationType.TABLE、GenerationType.SEQUENCE、GenerationType.IDENTITY、GenerationType.AUTO,其中,默认为AUTO,表示自动生成。

?????? (2)generator为不同策略类型所对应的生成规则名,它的值根据不同的策略有不同的设置。

?????? (3)能够标识为主键的属性类型,有如表5-2所列举的几种。

分类类型Java的基本数据类型byte、int、short、long、charJava的基本数据类型对应的封装类Byte、Integer、Short、Long、Character大数值类型 java.math.BigInteger字符串类型java.lang.String时间日期型java.util.Date
java.sql.Date

?

?

?

?

?

?

?

?

?

?

?

?

?

?????? double和float浮点类型和它们对应的封装类不能作为主键,这是因为判断是否唯一是通过equals方法来判断的,浮点型的精度太大,不能够准确地匹配。

?????? 例一,自增主键。在不同的数据库,自增主键的生成策略可能有所不同。例如MySQL的自增主键可以通过IDENTITY来实现,而Oracle可能需要创建Sequence来实现自增。JPA的实现将会根据不同的数据库类型来实现自增的策略。

@Target({TYPE, METHOD, FIELD})   @Retention(RUNTIME)  public @interface SequenceGenerator {   String name();   String sequenceName() default "";   int initialValue() default 0;   int allocationSize() default 50;  } 

?name属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。
sequenceName属性表示生成策略用到的数据库序列名称。
initialValue表示主键初识值,默认为0。
allocationSize表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。

?

?

?

?

?

?

?

?

?

?

热点排行