第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JPA(休眠)一對一阻抗不匹配

JPA(休眠)一對一阻抗不匹配

尚方寶劍之說 2021-08-04 16:45:20
我正在學習 JPA 和 Hibernate 來構建一個 Spring Boot webapp,但有一些問題困擾著我。它與一對一關系中的阻抗失配有關。假設我有兩個域?qū)嶓w A 和 B,它們具有一對一的關系。這就是我想要的:在 Java 類中,我希望 A 持有對 B 的引用;在數(shù)據(jù)庫中,我希望“b”對象的表有一個帶有“a”鍵外鍵的列。有沒有辦法在 Spring Boot 中使用 JPA 和 Hibernate 來做到這一點?我在這里報告了現(xiàn)實世界中的類和代碼的問題。在我的域中,我基本上有人和簽名。因此,在我的 Java 代碼中,我有 Person @Entity 和簽名 @Entity。在 Java 中,讓 Person 對象擁有一個 Signature 對象是有意義的。所以,這里是 Person 類:@Entity@Table(name = "people")public class Person {    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    @Column(name = "id")    private long id;    @Column(name="first_name")    @NotNull    @NotBlank    @Size(min = 3, max = 100)    private String firstName;    @Column(name="last_name")    @NotNull    @NotBlank    @Size(min = 3, max = 100)    private String lastName;    // ??? which annotations?    private Signature signature;    // I omit constructors, getters and setters for brevity這是簽名類:@Entity@Table(name = "signatures")public class Signature {    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    @Column(name = "id")    private long id;    @Column(name="name")    @NotNull    @NotBlank    private String name;    @Column(name="type")    @NotNull    private String type;    @Column(name="image")    @NotNull    @NotEmpty    @Lob    @Type(type="org.hibernate.type.MaterializedBlobType")    private byte[] image;    // I omit constructors, getters and setters for brevity如您所見,Ids 應該自動生成,我希望我的 Person 類能夠引用它的 Signature,反之亦然。相反,這是我想使用的數(shù)據(jù)庫模式:CREATE SCHEMA signatures;CREATE TABLE signatures.people (   id BIGSERIAL,   first_name VARCHAR(100) NOT NULL,   last_name VARCHAR(100) NOT NULL,   PRIMARY KEY (id));CREATE TABLE signatures.signatures (   id BIGSERIAL,   type VARCHAR[16] NOT NULL,   name VARCHAR[100] NOT NULL,   image BYTEA NOT NULL,   person BIGINT NOT NULL,   PRIMARY KEY (id),   CONSTRAINT fk_signature_people FOREIGN KEY (person) REFERENCES signatures.people (id) ON DELETE CASCADE ON UPDATE CASCADE);正如您在此處看到的,我希望 Signatures 表具有指向 People 表的外鍵,反之亦然。這可能嗎?
查看完整描述

1 回答

?
月關寶盒

TA貢獻1772條經(jīng)驗 獲得超5個贊

@OneToOne映射是有點奇數(shù)球。如果這個關系是雙向的,你可以決定所屬的一面,但在單向關系的聲明實體將永遠是一個與外鍵。

一種選擇是使關系雙向的,但隱藏代碼等方向發(fā)展。

另一種方法是使用一個@OneToMany映射,這將創(chuàng)建一個“多”表的外鍵。這也與數(shù)據(jù)庫模式相一致,為多個子表中的行會那么至少鏈接到同一父行理論,尤其是如果有不是一個約束,以確保它們是獨一無二的。


查看完整回答
反對 回復 2021-08-04
  • 1 回答
  • 0 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號