重大改版
 鱼翔空 2013-07-08 hibernate|   0 88 
文章评分 90 次,平均分 5.0

声明实体Bean

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity 
public class Person 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类别。


定义表

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.persistence.Version;
@Entity 
@Table(name="persons",
       uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})}
      )
public class Person implements Serializable {  
    private Integer version;
     @Version 
     @Column(name="OPTLOCK")  
    public Integer getVersion() {return version;}   
}

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

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

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

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

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


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

  @Transient的作用 :
  用于注释pojo对象中的属性,被注释的属性将成为短暂的,不会持久化到数据库的“短暂”属性。

默认情况下,所有属性都用 @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  
    @Temporal(TemporalType.TIME)  
    java.util.Date getDepartureTime() { ... } // TemporalType.TIME表示只记录时间, TemporalType.DATE表示只记录日期,TemporalType.TIMESTAMP表示日期和时间都记录  
    @Enumerated(EnumType.STRING)  
    Starred getNote() { ... } //标注枚举类型

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

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

@Lob 注解属性将被持久化为 Blob 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 注解将属性映射到列。

@Column(updatable = false, name = "pname", nullable = false, length=50)  
public String getName() { ... }

  定义 name 属性映射到 pname  列, 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;        //(9)  decimal精度  
     int scale() default 0;            //(10)  decimal长度



 

除特别注明外,本站所有文章均为我要编程原创,转载请注明出处来自http://5ycode.com/article/269.html

关于
该用户很懒!
切换注册

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享