Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux集群 > Architecture > » 正文

Hibernate注解大全收藏

来源: suliuyes 分享至:

Hibernate注释大全收藏

声明实体Bean

@Entity

public class Flight implements Serializable {

Long id;

@Id

public Long getId() { return id; }

public void setId(Long id) { this.id = id; }

}

@Entity 注解将一个类声明为实体 Bean, @Id 注解声明了该实体Bean的标识属性。

Hibernate 可以对类的属性或者方法进行注解。属性对应field类别,方法的 getXxx()对应property类别。

定义表

通过 @Table 为实体Bean指定对应数据库表,目录和schema的名字。

@Entity

@Table(name="tbl_sky")

public class Sky implements Serializable {

...

@Table 注解包含一个schema和一个catelog 属性,使用@UniqueConstraints 可以定义表的唯一约束。

@Table(name="tbl_sky",

uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})}

)

上述代码在 "month" "day" 两个 field 上加上 unique constrainst.

@Version 注解用于支持乐观锁版本控制。

@Entity

public class Flight implements Serializable {

...

@Version

@Column(name="OPTLOCK")

public Integer getVersion() { ... }

}

version属性映射到 "OPTLOCK" 列,entity manager 使用这个字段来检测冲突。 一般可以用 数字 或者timestamp 类型来支持 version.

实体Bean中所有非static transient 属性都可以被持久化,除非用@Transient注解。

默认情况下,所有属性都用 @Basic 注解。

public transient int counter; //transient property

private String firstname; //persistent property

@Transient

String getLengthInMeter() { ... } //transient property

String getName() {... } // persistent property

@Basic

int getLength() { ... } // persistent property

@Basic(fetch = FetchType.LAZY)

String getDetailedComment() { ... } // persistent property

@Temporal(TemporalType.TIME)

java.util.Date getDepartureTime() { ... } // persistent property

@Enumerated(EnumType.STRING)

Starred getNote() { ... } //enum persisted as String in database

上述代码中 counter, lengthInMeter 属性将忽略不被持久化,而 firstname, name, length 被定义为可持久化和可获取的。

@TemporalType.(DATE,TIME,TIMESTAMP) 分别Map java.sql.(Date, Time, Timestamp).

@Lob 注解属性将被持久化为 Blog Clob 类型。具体的java.sql.Clob, Character[], char[] java.lang.String 将被持久化为 Clob 类型. java.sql.Blob, Byte[], byte[] serializable type 将被持久化为 Blob 类型。

@Lob

public String getFullText() {

return fullText; // clob type

}

@Lob

public byte[] getFullCode() {

return fullCode; // blog type

}

@Column 注解将属性映射到列。

@Entity

public class Flight implements Serializable {

...

@Column(updatable = false, name = "flight_name", nullable = false, length=50)

public String getName() { ... }

定义 name 属性映射到 flight_name column, not null, can't update, length equal 50

@Column(

name="columnName"; (1) 列名

boolean unique() default false; (2) 是否在该列上设置唯一约束

boolean nullable() default true; (3) 列可空?

boolean insertable() default true; (4) 该列是否作为生成 insert语句的一个列

boolean updatable() default true; (5) 该列是否作为生成 update语句的一个列

String columnDefinition() default ""; (6) 默认值

String table() default ""; (7) 定义对应的表(deault 是主表)

int length() default 255; (8) 列长度

int precision() default 0; // decimal precision (9) decimal精度

int scale() default 0; // decimal scale (10) decimal长度

嵌入式对象(又称组件)也就是别的对象定义的属性

组件类必须在类一级定义 @Embeddable 注解。在特定的实体关联属性上使用 @Embeddable @AttributeOverride 注解可以覆盖该属性对应的嵌入式对象的列映射。

@Entity

public class Person implements Serializable {

// Persistent component using defaults

Address homeAddress;

@Embedded

@AttributeOverrides( {

@AttributeOverride(name="iso2", column = @Column(name="bornIso2") ),

@AttributeOverride(name="name", column = @Column(name="bornCountryName") )

} )

Country bornIn;

...

}

@Embeddable

public class Address implements Serializable {

String city;

Country nationality; //no overriding here

}

@Embeddable

public class Country implements Serializable {

private String iso2;

@Column(name="countryName") private String name;

public String getIso2() { return iso2; }

public void setIso2(String iso2) { this.iso2 = iso2; }

public String getName() { return name; }

public void setName(String name) { this.name = name; }

...

}

Person 类定义了 Address Country 对象,具体两个类实现见上。

无注解属性默认值:

? 属性为简单类型,则映射为 @Basic

? 属性对应的类型定义了 @Embeddable 注解,则映射为 @Embedded

? 属性对应的类型实现了Serializable,则属性被映射为@Basic并在一个列中保存该对象的serialized版本。

? 属性的类型为 java.sql.Clob or java.sql.Blob, 则映射到 @Lob 对应的类型。

映射主键属性

@Id 注解可将实体Bean中某个属性定义为主键,使用@GenerateValue注解可以定义该标识符的生成策略。

? AUTO - 可以是 identity column, sequence 或者 table 类型,取决于不同底层的数据库

? TABLE - 使用table保存id


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史