java - 如何在 Hibernate 中对相同的两个表之间的两个一对一关系进行建模?

标签 java hibernate

我有一个层次聚类可视化表dataset_pair_visualization:

+--------------+--------------+-------+------+
| dataset_1_fk | dataset_2_fk | image | link |
+--------------+--------------+-------+------+

表中的每一行都有两个外键,分别指向dataset 表中的两个不同行。我如何使用 Hibernate 的注释对此进行建模?关系是一对一还是一对多?我不需要 Dataset 实例的 SetList。我想引用两个特定的数据集。

我的尝试:

DatasetPairVisualization.java

public class DatasetPairVisualization {

    ...

    @OneToOne
    @JoinColumn(name = "dataset_1_fk")
    private Dataset dataset1;

    @OneToOne
    @JoinColumn(name = "dataset_2_fk")
    private Dataset dataset2;

    ...

Dataset.java

public class Dataset {

    ...

    // But one Dataset should map to one DatasetPairVisualization
    // What should this look like? "dataset" is obviously wrong,
    // since the properties are "dataset1" and "dataset2"
    @OneToOne(mappedBy = "dataset")
    private DatasetPairVisualization datasetPairVisualization1;

    ...

最佳答案

您有一个“ManyToOne”关系,其中“Many”(确切地说是两个)Dataset 与“”相关一个'DatasetPairVisualization。所以你必须这样映射它们:

public class DatasetPairVisualization {

    ...

    @ManyToOne
    @JoinColumn(name = "dataset_1_fk")
    private Dataset dataset1;

    @ManyToOne
    @JoinColumn(name = "dataset_2_fk")
    private Dataset dataset2;

    ...

在数据库中对“ManyToOne”进行建模的常用方法是使用从 DatasetDatasetPairVisualization 的外键。但由于您在另一个表中有 FK,并且它们仅限于出现两次,因此我没有看到进行双向映射的正确方法。

如果能够导航 Dataset DatasetPairVisualization的关系不是至关重要的,我会保持原样,并且不在 Dataset 实体中声明任何映射。

关于java - 如何在 Hibernate 中对相同的两个表之间的两个一对一关系进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33882663/

相关文章:

java - 一次收集几个 Future 的结果(即加入)

java.io.IOException :Unable to determine system type - response: 331 Please specify the password 异常

java - 独立的 java 基础 java 格式化程序

java - hibernate多对多仅插入学生表和映射表

java - 你如何在java项目中嵌入Tomcat?

java - 如何检测(在 Hibernate 中)数据库何时出现故障?

hibernate - 我想知道 Hibernate 是否有办法执行 ColumnTransformer 的编程配置?

java - 对特定列的 ManyToOne 注释

java - hibernate升级后的问题-hibernate中的嵌套循环(CascadeType和EmbeddedId)

java - Collections.singleton() 和 forEachRemaining - Java 8