Hibernate中的一些注解的学习

1、@Column注解

  就像@Table注解用来标识实体类与数据表的对应关系类似,@Column注解来标识实体类属性数据表字段对应关系

@Column注解一共有10个属性,这10个属性均为可选属性,各属性含义分别如下:

name 
name属性定义了被标注字段在数据库表中所对应字段的名称

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

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

insertable 
insertable属性表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。

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

columnDefinition 
columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)

table 
table属性定义了包含当前字段的表名。

length 
length属性表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。

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

此标记可以标注在getter方法或属性前,例如以下的两种标注方法都是正确的

2、@JoinColumn

  与@Column相区别的是:@JoinColumn注释的是保存表与表之间关系的字段,它要标注在实体属性上。而@Column标注的是表中不包含表关系的字段。

      与@Column标记一样,name属性是用来标识表中所对应的字段的名称。例如customer表中存在字段addr_id,标识的代码如下所示。 

  @OneToOne 

  @JoinColumn(name = "addr_id"

  public AddressEO getAddress() { 

         return address; 
  
  } 

若此时,不设置name的值,则在默认情况下,name的取值遵循以下规则: 

name=关联表的名称+“_”+ 关联表主键的字段名 

例如,CustomerEO实体中,如果不指定name的值,默认将对应name=address_id;因为@JoinColumn注释在实体 AddressEO属性上,实体AddressEO对应的表名为“address”;表address的主键是“id”,所以此时对应的默认的字段名称为 “address_id”。 
3、@ManyToOne

  从具体用户Users查到其对应的Group,反过来也能通过Group查到具体Users,所以是双向关联,所以Group对于Users是“一对多”的关联关系@OneToMany,Users对于Group是“多对一”@ManyToOne。

@Entity  
@Table(name="t_Group")//指定一个表名  
public class Group   
{  
    private int id;  
    private String name;  
    private Set<Users> users = new HashSet<Users>();  
  
    @Id  
    @GeneratedValue//主键用自增序列  
    public int getId() {  
        return id;  
    }  
    @OneToMany(mappedBy="group",cascade=(CascadeType.ALL))//以“多”一方为主导管理,级联用ALL  
    public Set<Users> getUsers() {  
        return users;  
    }  

  

@Entity  
@Table(name="t_Users")  
public class Users   
{  
    private int id;  
    private String name;  
    private Group group;  
  
    @Id  
    @GeneratedValue  
    public int getId() {  
        return id;  
    }  
    @ManyToOne(fetch=FetchType.LAZY,cascade=(CascadeType.ALL))//解决1+N,级联用ALL  
    @JoinColumn(name="groupId")//指定外键名称,不指定的默认值是group_Id  
    public Group getGroup() {  
        return group;  
    }  

  

posted @ 2016-04-19 17:38  ~_~乐凡~_~  阅读(2035)  评论(0编辑  收藏  举报