您的位置:首页 > 其它

常用的hibernate annotation标签使用说明

2017-07-21 16:30 302 查看
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,@[b]Many[b]To[b]One,[b]@OneTo[b][b][b][b][b]One[/b][/b][/b][/b],@Many[b]To[b][b][b][b][b][b]Many[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

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标签一定是定义在被拥有方的,他指向拥有方;

[b]4.关于主键自动生成问题[/b]

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等其它策略.(相关用法,上网查询)
[b]5.相关例子如下[/b]

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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: