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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM