Hibernate注解

来源:互联网 发布:二代身份证相片 软件 编辑:程序博客网 时间:2024/05/01 02:04

hibernate注解 

常用的hibernate annotation标签如下

@Entity        

--注释声明该类为持久类。 

@Table(name="promotion_info")    --持久性映射的表(表名="promotion_info) 

@Columnname=DESC,nullable=false,length=512) --用于指定持久属性或字段的映射列。 

@Id      

--注释可以表明哪种属性是该类中的独特标识符(即相当于数据表的主键) @GeneratedValue   

--定义自动增长的主键的生成策略。 

@Transient   

--将忽略这些字段和属性,不用持久化到数据库 @Temporal(TemporalType.TIMESTAMP)  

--声明时间格式  @Enumerated 

--声明枚举  

@Version   

--声明添加对乐观锁定的支持 @OneToOne    

--可以建立实体bean之间的一对一的关联 @OneToMany    

--可以建立实体bean

之间的一对多的关联  

@ManyToOne   

--可以建立实体bean之间的多对一的关联  @ManyToMany  

--可以建立实体bean之间的多对多的关联  

@Formula  

--一个SQL表达式,这种属性是只读的,不在数据库生成属性(可以使用sumaveragemax

@OrderBy     

--Many端某个字段排序(List) 

 

下面是对以上常用Hibernate注解标签的详细介绍与举例:

 

@Entity               

--注释声明该类为持久类。将一个Javabean类声明为一个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类属性都为映射到数据表的持久性字段.若在类中,添加另外属性,而非映射来数据库的要用下面的Transient来注解

@Table(name="promotion_info")       

--持久性映射的表(表名="promotion_info).@Table是类一级的注解,定义在@Entity

 

为实体bean映射表,目录和schema的名字,默认为实体bean的类名,不带包名.  

示例:

     

@Entity     

@Table(name="CUST", schema="RECORDS") public class Customer { ... } 

@Columnname=DESC,nullable=false,length=512) 

--用于指定持久属性或字段的映射列。如果没有指定 Column 注释,则应用默认值。 

该注释下的一些具体属性如下: 

 unique属性表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint 

 nullable属性表示该字段是否可以为null值,默认为true 

 insertable属性表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。  updatable属性表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。insertableupdatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。 

 columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。 

 table属性表示当映射多个表时,指定表的表中的字段。默认值为主表的表名。  length属性表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。 

 precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。 

 

示例 1 

@Column(name="DESC", nullable=false, length=512) public String getDescription() { return description; } 

示例 2 

@Column(name="DESC",columnDefinition="CLOB  NOT NULL",table="EMP_DETAIL") @Lob 

public String getDescription() {  return description;  } 

示例3 

@Column(name="ORDER_COST", updatable=false, precision=12, scale=2) public BigDecimal getCost() { return cost; } 

@Id 

--注释可以表明哪种属性是该类中的独特标识符(即相当于数据表的主键)

示例:

    

@Id    

public Long getId() { return id; }

 

@GeneratedValue    

--定义自动增长的主键的生成策略示例 1      

@Id      

@GeneratedValue(strategy=SEQUENCE,  generator="CUST_SEQ")      @Column(name="CUST_ID")      public Long getId() { return id; } 

示例 2      @Id      

@GeneratedValue(strategy=TABLE,  generator="CUST_GEN")      @Column(name="CUST_ID")      Long id;   

@Transient              

--将忽略这些字段和属性,不用持久化到数据库.适用于,在当前的持久类中,某些属性不是用于映射到数据表,而是用于其它的业务逻辑需要,这时,须将这些属性进行transient的注解.否则系统会因映射不到数据表相应字段而出错.  

示例:�     

@Entity     

public class Employee {         @Id int id;         

@Transient User currentUser;         ...     } 

@Temporal(TemporalType.TIMESTAMP) 

--声明时间格式  

示例: 

     @Temporal(DATE) 

     protected Java.util.Date endDate; @Enumerated         

 --声明枚举  

示例:    

public enum EmployeeStatus {FULL_TIME, PART_TIME, CONTRACT}    public enum SalaryRate {JUNIOR, SENIOR, MANAGER, EXECUTIVE}    

@Entity public class Employee {        public EmployeeStatus getStatus() {...}        @Enumerated(STRING)        

public SalaryRate getPayScale() {...}        ...    } 

@Version                 

--声明添加对乐观锁定的支持

0 0
原创粉丝点击