1. 程式人生 > 其它 >hibernate實體註解 @OneToMany、@OneToOne、@ManyToOne、@ManyToMany

hibernate實體註解 @OneToMany、@OneToOne、@ManyToOne、@ManyToMany

hibernate註解關聯查詢:一對多、一對一、多對一、多對多

兩張表UserTest、AddressTest

一對多:@OneToMany

  實體註解:

@Fetch(FetchMode.SUBSELECT)
@OneToMany(targetEntity = AddressTest.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "ADDRESS_USERID", referencedColumnName = "USER_ID", insertable = false, updatable = false)
 private List<AddressTest> machineMapperList;


ADDRESS_USERID欄位是ADDRESS_TEST表中的關聯欄位
USER_ID欄位位USER_TEST表中的主鍵

結果:UserTest{userId='H320210816161029000001', userName='張三',
machineMapperList=[AddressTest{addressId='H320210816161316000001', userId='H320210816161029000001', addressInfo='北京市', state=1},
AddressTest{addressId='H320210816161350000001', userId='H320210816161029000001', addressInfo='南京市', state=1}]}

多對一:@ManyToOne

  實體註解

@ManyToOne(targetEntity = UserTest.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "ADDRESS_USERID", referencedColumnName = "USER_ID", insertable = false, updatable = false)
private UserTest userTest

ADDRESS_USERID這個是ADDRESS_TEST表中的關聯欄位,這裡正好於一對多的相反
USER_ID這是USER_TEST表中的主鍵

一對一:@OneToOne

  實體註解

@OneToOne(targetEntity = UserTest.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "ADDRESS_USERID", referencedColumnName = "USER_ID", insertable = false, updatable = false)
 private UserTest userTest

這裡的對映值同多對一的一樣

多對多:@ManyToMany

@ManyToMany(targetEntity = UserTest.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "A_U" , joinColumns = { @JoinColumn(name ="ADDRESS_USERID" )}, inverseJoinColumns = { @JoinColumn(name = "USER_ID") })
private List<UserTest> userTest


A_U是中間表
ADDRESS_USERID本表的外來鍵
USER_ID是USER_TEST的主鍵