• 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;  
        }  
    

      

  • 相关阅读:
    如何生成随机数
    2017新数组
    JAVA基础
    java基本数据类型
    简易图片自动轮播
    JDK,JRE,JVM
    年月日 日期选择问题
    多选按钮选中进行下一步
    js基本函数和基本方法
    数组简单应用
  • 原文地址:https://www.cnblogs.com/huiyuantang/p/5409101.html
Copyright © 2020-2023  润新知