JPA如何设计多个表与公共表一对一关系

时间:2018-07-05 12:04:12

标签: database hibernate jpa foreign-keys entity-relationship

我遇到的情况是,很少有表(TableA和TableB)与同一张表(TableC)具有一对一关系。 TableA和TableB不相关。我设计的表格如下。

TableA
- key
- something
- c_ref_key

TableB
- key
- something
- c_ref_key

TableC
- key
- something

当我使用休眠逆向工程从该数据库生成JPA实体时,它将在TableA和TableB中为TableC创建多对一关系。通常,要创建一对一关系,我会将TableA主键作为TableC的主键,但是由于我还有其他表(TableB),这些表也与TableC具有一对一的关系,因此我无法做到这一点。因此,我不得不在TableA和TableB中使用TableC的外键(这在JPA中导致多对一的关系)。 还有其他方法可以保持一对一关系吗?或生成的JPA实体中至少有一对一的关系?

1 个答案:

答案 0 :(得分:0)

您可以将@OneToOne休眠映射与@JoinColumn一起使用以创建外键。以下是架构的最基本实现,您可以根据需要对其进行扩展。

TableA.java

    @Entity(name = "TABLE_A")
    public class TableA {

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long key_a;

        private String something;

        @OneToOne
        @JoinColumn(name = "c_ref_key", referencedColumnName = "key_c")
        private TableC c_ref_key;
    }

TableB.java

@Entity(name = "TABLE_B")
public class TableB {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long key_b;

    private String something;

    @OneToOne
    @JoinColumn(name = "c_ref_key", referencedColumnName = "key_c")
    private TableC c_ref_key;
}

TableC.java

@Entity(name = "TABLE_C")
public class TableC {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long key_c;

    private String something;
}

我在MySql数据库上测试了该架构,并且运行良好。