zoukankan      html  css  js  c++  java
  • 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;  
        }  
    

      

  • 相关阅读:
    firefox远程调试
    PHP使用unset销毁变量并释放内存(转)
    去掉超级链接的虚线框
    如何减少 reflow(回流)和 repaint(重绘)
    Chrome远程调试
    3大mobile浏览器远程调试
    IE6下使用滤镜后链接无法点击的BUG
    让IE6区块元素具备display:inlineblock属性
    Call to undefined function curl_init()解决方法(转)
    CSS3 Gradient
  • 原文地址:https://www.cnblogs.com/huiyuantang/p/5409101.html
Copyright © 2011-2022 走看看