常用的hibernate annotation标签使用说明

1.注释可以写在成员变量之上,也可以写在getter方法之上,但一定要保持统一性!

2.常用的hibernate annotation标签如下:

@Entity       --注释声明该类为持久类。将一个Javabean类声明为一 个实体的数据库表映射类,最好实现序列化.
@Table(name="DAT_USER_INFO")    --持久性映射的表(表名="DAT_USER_INFO).@Table是类一级的注解,定义在@Entity下,为实体bean映射表.
@Id      --该标签用于标识数据实体的主键
@GeneratedValue     --定义主键生成方式,通常和@ org.hibernate.annotations.GenericGenerator一同使用,用于生成主键。
@GenericGenerator   --Hibernate提供的主键构造器。通常与@GeneratedValue配合使用。 
@Column     --用于表示实体属性对应数据库表的哪个字段。
@Transient --用于标识不在数据库表中映射的属性。(实体类有的成员属性,但数据库中没有) 
@Temporal(TemporalType.TIMESTAMP)--声明时间格式 
@Enumerated --声明枚举 
@Version --声明添加对乐观锁定的支持 
@OneToOne --可以建立实体bean之间的一对一的关联 
@OneToMany --可以建立实体bean之间的一对多的关联 
@ManyToOne --可以建立实体bean之间的多对一的关联 
@ManyToMany --可以建立实体bean之间的多对多的关联 
@Formula --一个SQL表达式,这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等) 
@OrderBy --Many端某个字段排序(List)

3.参数解释如下:

@table 参数:

name – 用于指定表名,表名统一用大写字母,单词之间用下划线分隔。

@column  参数:

name – 字段名,数据库中的字段名,默认为属性名,建议手工指定,字段名统一使用大写字母

nullable -boolean 值,表示该属性是否可以为空,默认为true。

insertable -boolean 值,表示该属性是否在insert语句中包含,默认为true。

updatable -boolean 值,表示该属性是否在update 语句中包含,默认为true。

length -int值,表示该属性值的长度,通常用于字符串属性,默认为255。

unique -boolean 值,表示该属性值是否建立唯一索引,默认为false。

 @GeneratedValue  参数

strategy -构造方式;generator -构造器名称。

样例:

1、 由Hibernate自动生成主键:@GeneratedValue(strategy=GenerationType.AUTO)

2、 根据主指构造器生成主键:@GeneratedValue(generator="assigned")

 @GenericGenerator  参数

name -构造器名称,在@GeneratedValue 中引用;strategy -构造方式。

样例:

1.      手工指定的主键:
@GeneratedValue(generator="assigned") 
@GenericGenerator(name = "assigned", strategy = "assigned")

2.      从Sequence 获取主键:
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="TASK_SEQ")
@SequenceGenerator(name="TASK_SEQ",sequenceName="SEQ_GROUP_SEND_TASK")

@OneToMany,@ManyToOne,@OneToOne,@ManyToMany

Cascade { CascadeType.PERSIST (级联新建) ,CascadeType.REMOVE  (级联删除),CascadeType.REFRESH (级联刷新),CascadeType.MERGE   (级联更新)中选择一个或多个。,CascadeType.ALL}
 
fetch : 1)LAZY(默认值)采用延时加载,查询数据时,不一起查询关联对象的数据。而是当访问关联对象时(如:getStudnets()时)才触发相应的查询操作,获取关联对象数据。

                 2)EAGER:是在查询数据时,也直接一起获取关联对象的数据。

1>只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性; 
2>mappedBy标签一定是定义在被拥有方的,他指向拥有方; 

4.关于主键自动生成问题

Hibernate 能够出色地自动生成主键。其生成规则由@GeneratedValue设定的.

JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO. 
TABLE:使用一个特定的数据库表格来保存主键。 
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 
IDENTITY:主键由数据库自动生成(主要是自动增长型) ----Oracle 不支持自增字段
AUTO:主键由程序控制。 

在指定主键时,如果不指定主键生成策略,默认为AUTO。 

@Id相当于@Id@GeneratedValue(strategy = GenerationType.AUTO)

 
对于oracle想使用各自的Sequence,设置如下:        
@GeneratedValue(strategy = GenerationType.AUTO,generator="PROMOTION_SEQ")        
@SequenceGenerator(name="PROMOTION_SEQ",sequenceName="PROMOTION_SEQ")  
 
同时,也可采用uuid,native等其它策略.(相关用法,上网查询) 

5.相关例子如下

1.@Formula             

/**
 * 参与评审的商品表
 * 
 */
@Entity
@Table(name = "MARKET_REVIEW_PRODUCT")
@AttributeOverride(column = @Column(name = "REVIEW_PRODUCT_ID"), name = "id")
public class ReviewProduct  extends IdEntity {
    private static final long serialVersionUID = 1L;
    
    private ProductReview review;  //商品评审基本信息    
    private Integer agreeAmount;    //同意结果统计
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "REVIEW_ID") public ProductReview getReview() { return review; } public void setReview(ProductReview review) { this.review = review; } @Formula("(select count(*) from MARKET_PRODUCT_REVIEW_RESULT t where t.REVIEW_ID=REVIEW_ID and t.REVIEW_RESULT='1' )") public Integer getAgreeAmount() { return agreeAmount; } public void setAgreeAmount(Integer agreeAmount) { this.agreeAmount = agreeAmount; } }
原文地址:https://www.cnblogs.com/mcahkf/p/7216580.html