日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate之表间关系

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate之表间关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ManyToOne

? ? ? ? ?多對一,是最常見的表間關系,對應關系數據庫中的外鍵關系。通常用于建立子實體和其父實體的關聯關系

@Entity(name = "Person") public static class Person {@Id@GeneratedValueprivate Long id;//Getters and setters are omitted for brevity }@Entity(name = "Phone") public static class Phone {@Id@GeneratedValueprivate Long id;@Column(name = "`number`")private String number;@ManyToOne@JoinColumn(name = "person_id",foreignKey = @ForeignKey(name = "PERSON_ID_FK"))private Person person;//Getters and setters are omitted for brevity } CREATE TABLE Person (id BIGINT NOT NULL ,PRIMARY KEY ( id ) )CREATE TABLE Phone (id BIGINT NOT NULL ,number VARCHAR(255) ,person_id BIGINT ,PRIMARY KEY ( id ))ALTER TABLE Phone ADD CONSTRAINT PERSON_ID_FK FOREIGN KEY (person_id) REFERENCES Person 例子:

Person person = new Person(); entityManager.persist( person );Phone phone = new Phone( "123-456-7890" ); phone.setPerson( person ); entityManager.persist( phone );entityManager.flush(); phone.setPerson( null ); INSERT INTO Person ( id ) VALUES ( 1 )INSERT INTO Phone ( number, person_id, id ) VALUES ( '123-456-7890', 1, 2 )UPDATE Phone SET number = '123-456-7890',person_id = NULL WHERE id = 2

?

OneToMany

? ? ? ? 一對多用于建立父實體和子實體之間的關系。如果子實體側沒有對應的ManyToOne配置,則這個OneToMany是單向的。如果子實體側有對應的ManyToOne配置,則這個OneToMany是雙向的。雙向的關系,可以讓開發者在兩側都能獲取關聯關系。

? ? ?單向的一對多關系,實例:

@Entity(name = "Person") public static class Person {@Id@GeneratedValueprivate Long id;@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)private List<Phone> phones = new ArrayList<>();//Getters and setters are omitted for brevity }@Entity(name = "Phone") public static class Phone {@Id@GeneratedValueprivate Long id;@Column(name = "`number`")private String number;//Getters and setters are omitted for brevity } CREATE TABLE Person (id BIGINT NOT NULL ,PRIMARY KEY ( id ) )CREATE TABLE Person_Phone (Person_id BIGINT NOT NULL ,phones_id BIGINT NOT NULL )CREATE TABLE Phone (id BIGINT NOT NULL ,number VARCHAR(255) ,PRIMARY KEY ( id ) )ALTER TABLE Person_Phone ADD CONSTRAINT UK_9uhc5itwc9h5gcng944pcaslf UNIQUE (phones_id)ALTER TABLE Person_Phone ADD CONSTRAINT FKr38us2n8g5p9rj0b494sd3391 FOREIGN KEY (phones_id) REFERENCES PhoneALTER TABLE Person_Phone ADD CONSTRAINT FK2ex4e4p7w1cj310kg2woisjl2 FOREIGN KEY (Person_id) REFERENCES Person

? ? ?Hibernate對單向的一對多關系,兩個實體對應兩個表,關聯關系使用一個中間表來表達。單向一對多在級聯操作上比較低效。

?

雙向一對多

? ? Hibernate處理雙向一對多關系,按多對一的關系來處理,本質上還是主外鍵關系。雙向的一對多使父子雙方都能能力來獲取關聯關系。使操作更方便,效率等同多對一。

? ??

@Entity(name = "Person") public static class Person {@Id@GeneratedValueprivate Long id;@OneToMany(mappedBy = "person", cascade = CascadeType.ALL, orphanRemoval = true)private List<Phone> phones = new ArrayList<>();//Getters and setters are omitted for brevitypublic void addPhone(Phone phone) {phones.add( phone );phone.setPerson( this );}public void removePhone(Phone phone) {phones.remove( phone );phone.setPerson( null );} }@Entity(name = "Phone") public static class Phone {@Id@GeneratedValueprivate Long id;@NaturalId@Column(name = "`number`", unique = true)private String number;@ManyToOneprivate Person person;//Getters and setters are omitted for brevity @Overridepublic boolean equals(Object o) {if ( this == o ) {return true;}if ( o == null || getClass() != o.getClass() ) {return false;}Phone phone = (Phone) o;return Objects.equals( number, phone.number );}@Overridepublic int hashCode() {return Objects.hash( number );} } CREATE TABLE Person (id BIGINT NOT NULL ,PRIMARY KEY ( id ) )CREATE TABLE Phone (id BIGINT NOT NULL ,number VARCHAR(255) ,person_id BIGINT ,PRIMARY KEY ( id ) )ALTER TABLE Phone ADD CONSTRAINT UK_l329ab0g4c1t78onljnxmbnp6 UNIQUE (number)ALTER TABLE Phone ADD CONSTRAINT FKmw13yfsjypiiq0i1osdkaeqpg FOREIGN KEY (person_id) REFERENCES Person

?

轉載于:https://www.cnblogs.com/hengwu/p/9864489.html

總結

以上是生活随笔為你收集整理的Hibernate之表间关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。