hibernate注解解析

最近学习hibernate注解形式配置POJO类,将注解的解析记下来,以备以后使用。

例1.

@Entity
@Table(name="user") 
public class Flight implements Serializable {    Long id; @Id
@GeneratedValue(generator="generator")
@GenericGenerator(name="generator", strategy = "native")
public Long getId() { return id; }  public void setId(Long id) { this.id = id; }  }

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

@Entity

声明一个类为实体Bean。

@Table

说明此实体类映射的表名,目录,schema的名字。

@Id

声明此表的主键。

@GeneratedValue

定义主键的增长策略。我这里一般交给底层数据库处理,所以调用了名叫generator的增长方式,由下边的@GenericGenerator实现

@GenericGenerator

 

hibernate内部的主键增长方式.

关于@GeneratedValue@GenericGenerator的详细说明,在我的另一篇转载的文章里边有。
@GeneratedValue 与 @GenericGenerator

 

例2.

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

@UniqueConstraint

将对应的字段设置唯一性标识

例3.

1 public class Flight implements Serializable {
2    @Version 
3    @Column(name="OPTLOCK"4     public Integer getVersion() {} } 

 

@Version 

注解用于支持乐观锁版本控制。一般可以用 数字 或者 timestamp 类型来支持 version.

@Column

用于映射对应的字段,其中参数详解如下:

        name = "columnName";                                (1)
        boolean unique() default false;                      (2)
        boolean nullable() default true;                     (3)
        boolean insertable() default true;                  (4)
        boolean updatable() default true;                 (5)
        String columnDefinition() default "";            (6)
        String table() default "";                                (7)
        int length() default 255;                                (8)
        int precision() default 0;                               (9)
        int scale() default 0;                                     (10)
(1)     name 可选,列名(默认值是属性名)
(2)     unique 可选是否在该列上设置唯一约束(默认值false)
(3)     nullable 可选是否设置该列的值可以为空(默认值true)
(4)     insertable 可选该列是否作为生成的insert语句中的一个列(默认值true)
(5)     updatable 可选该列是否作为生成的update语句中的一个列(默认值true)
(6)     columnDefinition 可选为这个特定列覆盖SQL DDL片段 (这可能导致无法在不同数据库间移植)
(7)     table 可选定义对应的表(默认为主表)
(8)     length 可选列长度(默认值255)
(9)     precision 可选列十进制精度(decimal precision)(默认值0)
(10)   scale 可选如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)

 例4.

public class user
{
    @Transient    
    private Integer id;
    @Basic(fetch=FetchType.LAZY,optional=true)
    private String name;

    @Transient
    public Integer getId() {}
@Temporal(TemporalType.TIME)
public java.util.Date getDatetime() {};
}

@Transient
     被注解成 @Transient 的 getter 方法或属性,将不会被持久化,

@Basic
    所有没有定义注解的属性,等价于在其上面添加了 @Basic注解可以声明属性的获取策略 ( fetch strategy )

    fetch:抓取策略,延时加载与立即加载,optional:指定在生成数据库结构时字段是否允许为 null.

@Temporal

    在核心的 Java API 中并没有定义时间精度 ( temporal precision )。因此处理时间类型数据时,你还需要定义将其存储在数据库中所预期的精度。
    在数据库中,表示时间类型的数据有 DATE,TIME,和 TIMESTAMP 三种精度 ( 即单纯的日期,时间,或者两者兼备 )。 可使用 @Temporal 注解来调整精度。

 

其他属性:

@Enumerated
@javax.persistence.Enumerated(EnumType.STRING)
value:EnumType.STRING,EnumType.ORDINAL
枚举类型成员属性映射,EnumType.STRING指定属性映射为字符串,EnumType.ORDINAL指定属性映射为数据序

@Lob
@javax.persistence.Lob
用于标注字段类型为Clob和Blob类型
Clob(Character Large Ojects)类型是长字符串类型,实体的类型可为char[]、Character[]、或者String类型
Blob(Binary Large Objects)类型是字节类型,实体的类型可为byte[]、Byte[]、或者实现了Serializable接口的类。
通常使用惰性加载的方式, @Basic(fetch=FetchType.LAZY)

@SecondaryTable 
@javax.persistence.SecondaryTable
将一个实体映射到多个数据库表中
如:
@Entity
@SecondaryTables({ 
@SecondaryTable(name = "Address"), 
    @SecondaryTable(name = "Comments") 
})
public class Forum implements Serializable {
@Column(table = "Address", length = 100) 
private String street; 
@Column(table = "Address", nullable = false) 
private String city; 
@Column(table = "Address") 
private String conutry; 
@Column(table = "Comments") 
private String title; 
@Column(table = "Comments") 
private String Comments; 
@Column(table = "Comments") 
} table属性的值指定字段存储的表名称 没有用 @Column 注解改变属性默认的字段将会存在于 Forum 表

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。