JPA-2 基本注解

  JPA的基本注解主要包括@Entity、@Table、@Id、@GeneratedValue、@Basic、@Column、@Transient、@Temporal和@TableGenerator等。
  其中,JPA基本注解的具体实现代码下载地址:http://download.csdn.net/download/bingbeichen/9805737


1. @Entity

  标注位置:实体类声明语句之前;
  主要作用:标注该Java类为实体类,且将其映射到指定的数据库表。

// 例:默认将实体类Customer映射到数据库的CUSTOMER表上
@Entity
public class Customer { //... }

2. @Table

  标注位置:实体类声明语句之前,与@Entity注释并列使用;
  主要作用:标注当前实体类映射到数据库中的数据表名,当实体类与数据表名不同时使用。

// 例:将实体类Customer映射到数据库的CUSTOMERS表上
@Table(name="CUSTOMERS")
@Entity
public class Customer { //... }

3. @Id

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:指定该实体类的当前属性映射到数据表的主键列。

// 例:将该实体类id属性映射到数据表的主键列
@Id
public Integer getId() {
    return id;
}

4. @GeneratedValue

  标注位置:与@Id注释配合使用;
  主要作用:通过其strategy属性指定数据表主键的生成策略。默认情况下,JPA自动选择最适合底层数据库的主键生成策略,即SqlServer对应identity,而MySQL对应auto increment。
  其中,在javax.persistence.GenerationType中定义了如下几种可供选择的主键生成策略:

主键生成策略具体描述
IDENTITY采用数据库ID自增长的方式来生成主键,但Oracle数据库不支持该方式
AUTO默认选项,JPA自动选择合适的主键生成策略
SEQUENCE采用序列生成主键,通过@SequenceGenerator注解指定序列名,但MySQL数据库不支持该方式
TABLE采用外部表生成主键,框架借由表模拟序列产生主键,该策略可使应用程序更易于数据库移植
// 例:采用外部表的方式来生成主键
@TableGenerator(name="ID_GENERATOR",
        table="jpa_id_generators",
        pkColumnName="PK_NAME",
        pkColumnValue="ORDER_ID",
        valueColumnName="PK_VALUE",
        allocationSize=1)
@GeneratedValue(strategy=GenerationType.TABLE, generator="ID_GENERATOR")
//  @GeneratedValue(strategy=GenerationType.AUTO)
@Id
public Integer getId() {
    return id;
}

5. @Basic

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:标注将实体类的当前属性映射到数据库表的字段,对于没有任何标注的getter()方法,默认即为@Basic,其具有如下属性:

属性说明
fetch表示该属性的读取策略,取值为EAGER(主支抓取,默认值)和LAZY(延迟加载)
optional表示该属性是否允许为null,默认为true
// 例:将该实体类email属性映射到数据库表的email字段
public String getEmail() {
    return email;
}

6. @Column

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:标注实体类的当前属性映射到数据库表的字段名,当属性名与数据表字段名不一致时使用。
  标注将实体类的当前属性映射到数据库表的字段,对于没有任何标注的getter()方法,默认即为@Basic,其具有如下属性:

属性说明
name设置映射到数据库表的字段名
unique设置映射到数据库表的字段具有唯一约束
nullable设置映射到数据库表的字段是否为空
length设置映射到数据库表的字段长度
columnDefinition设置映射到数据库表的字段的实际类型,如将String类型属性映射为BLOB或TEXT类型字段
// 例:将该实体类name属性映射到数据库表的LAST_NAME字段
@Column(name="LAST_NAME")
public String getName() {
    return name;
}

7. @Transient

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:标注实体类的当前属性不进行数据表字段的映射,ORM框架将忽略此映射,如实体类的getInfo()方法通常不需要映射到数据表的字段上。


8. @Temporal

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:标注实体类中Date类型(Java核心API中未定义Date类型的精度)的属性映射到数据表字段的具体精度(数据库中Date类型的数据有DATE、TIME和TIMESTAMP三种精度)。

// 例:将该实体类Date类型的createTime属性映射到数据库表TIMESTAMP精度的CREATE_TIME字段
@Temporal(TemporalType.TIMESTAMP)
@Column(name="CREATE_TIME")
public Date getCreateTime() {
    return createTime;
}
// 例:将该实体类Date类型的birth属性映射到数据库表DATE精度的BIRTH字段
@Temporal(TemporalType.DATE)
public Date getBirth() {
    return birth;
}

9. @TableGenerator:使用外部表生成主键

  标注位置:实体类的属性声明语句之前,或属性的getter()方法之前;
  主要作用:将当前主键的值单独保存到外部数据表中,每次从该外部表中查询获取其当前数据表的主键值;
  对比优势:该主键生成策略可以适用于任何数据库,故更加易于数据库的移植。
  @TableGenerator主要具有如下属性:

属性说明
name表示该主键生成策略的名称,其被引用在@GeneratedValue中设置的generator值中
table表示表生成策略所持久化的表名
pkColumnName表示在持久化表中,该主键生成策略所对应键值的名称
valueColumnName表示在持久化表中,该主键当前所生成的值,其会随着每次创建而累加
pkColumnValue表示在持久化表中,该生成策略所对应的主键
allocationSize表示每次主键值增加的大小,默认值为50
// 例:采用外部表的方式来生成主键
@TableGenerator(name="ID_GENERATOR",
        table="jpa_id_generators",
        pkColumnName="PK_NAME",
        pkColumnValue="CUSTOMER_ID",
        valueColumnName="PK_VALUE",
        allocationSize=1)
@GeneratedValue(strategy=GenerationType.TABLE, generator="ID_GENERATOR")
//  @GeneratedValue(strategy=GenerationType.AUTO)
@Id
public Integer getId() {
    return id;
}

  这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值