簡體   English   中英

Hibernate IS-A 關系映射

[英]Hibernate IS-A relation mapping

我有一個實體模型(a)和一些其他實體(x),如手機、平板電腦、汽車等。

實體(x) 有一個主鍵引用模型(a) 的主鍵,因此實體(x) 只能采用模型(a) 實體的值。 我說的是IS-A關系。

我還需要從兩端訪問。

我需要 hibernate 中的映射幫助。 我現在做什么但不起作用:

  • model 實體
@Data
@Entity(name = "Model")
@Table(name = "model", schema = "mysch")
public class Model {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "model_id", columnDefinition = "BIGINT UNSIGNED")
    private long id;

    @Column(name = "description", length = 255, nullable = false, unique = true)
    private String description;

    @OneToOne(mappedBy = "model")
    private Mobile mobile;
  • 移動實體
@Data
@Entity(name = "Mobile")
@Table(name = "mobile", schema = "mysch")
public class Mobile {

    @Id
    @Column(name = "mobile_id", columnDefinition = "BIGINT UNSIGNED")
    private long id;

    @OneToOne
    @JoinColumn(name = "mobile_id", referencedColumnName = "model_id", nullable = false, foreignKey = @ForeignKey(name = "FK_Mobile_Model"))
    private Model model;

我想要的是在移動表中創建一個引用 model 表的 PK 的 PK。

我可能已經找到了解決方案。 似乎現在可以工作。 我稍后會進行 jpa 查詢來測試它。 盡管數據庫中的模式似乎正是我想要的。 這是我所做的:

  • model 實體
@Data
@Entity(name = "Model")
@Table(name = "model", schema = "sch")
public class Model {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "model_id", columnDefinition = "BIGINT UNSIGNED")
    private long id;

    @Column(name = "description", length = 255, nullable = false, unique = true)
    private String description;

    @OneToOne(mappedBy = "model")
    private Mobile mobile;

}
  • 移動的
@Data
@Entity(name = "Mobile")
@Table(name = "mobile", schema = "sch")
public class Mobile {

    @Id
    @Column(name = "mobile_id", columnDefinition = "BIGINT UNSIGNED")
    private long id;

    @OneToOne
    @MapsId
    private Model model;

}

我不喜歡手機生成的 PK 列名......它就像:“model_model_id”。

雖然它似乎運作良好......我遇到了一個問題。 我得到:

Exception in thread "JavaFX Application Thread" java.lang.StackOverflowError
at java.base/java.lang.String.equals(String.java:1009)
at com.dc.sch.entity.Model.equals(Model.java:6)
at com.dc.sch.entity.Mobile .equals(Mobile .java:6)
at com.dc.sch.entity.Model.equals(Model.java:6)
at com.dc.sch.entity.Mobile .equals(Mobile .java:6)
at com.dc.sch.entity.Model.equals(Model.java:6)
at com.dc.sch.entity.Mobile .equals(Mobile .java:6)
at com.dc.sch.entity.Model.equals(Model.java:6)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM