1. 程式人生 > >@ManyToOne和@OneToMany 註解

@ManyToOne和@OneToMany 註解

作用 pri hibernate eager order 不起作用 tom 並且 column

(1)ManyToOne(多對一)單向:不產生中間表,但可以用@Joincolumn(name=" ")來指定生成外鍵的名字,外鍵在多的一方表中產生!

(2)OneToMany(一對多)單向:會產生中間表,此時可以用@onetoMany @Joincolumn(name=" ")避免產生中間表,並且指定了外鍵的名字(別看 @joincolumn在一中寫著,但它存在在多的那個表中)

(3)OneToMany ,ManyToOne 雙向(兩個註解一起用的):如果不在@OneToMany中加mappedy屬性就會產生中間表,此時通常在@ManyToOne的註 解下再添上註解@Joincolumn(name=" ")來指定外鍵的名字(說明:多的一方為關系維護端,關系維護端負責外鍵記錄的更新,關系被維護端沒有權利更新 外鍵記錄)!(@OneToMany(mappedBy="一對多中,多中一的屬性")出現mapby為被維護端|||默認為延遲加載)

用例:@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="child_id")
private OrderChild orderChild;

@OneToMany(mappedBy="orderChild",fetch=FetchType.LAZY,cascade={CascadeType.MERGE})
@NotFound(action=NotFoundAction.IGNORE)//代表可以為空,允許為null
private List<OrderChildGoods> goodsList;

hibernate中@ManyToOne默認是立即加載,@OneToMany默認是懶加載

但是如果加上了@NotFound之後設置的fetch=FetchType.LAZY是不起作用的,也就是設置@NotFound後變為了立即加載eager

@ManyToOne和@OneToMany 註解