首页 文章

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

提问于
浏览
1

我有一种情况,即几个表(TableA和TableB)与同一个表(TableC)具有一对一的关系 . TableA和TableB无关 . 我设计了如下表格 .

TableA
- key
- something
- c_ref_key

TableB
- key
- something
- c_ref_key

TableC
- key
- something

当我使用hibernate逆向工程从这个数据库生成JPA实体时,它在TableA和TableB中为TableC创建了多对一关系 . 通常,为了创建一对一的关系,我会将TableA主键作为TableC的主键,但由于我有其他表(TableB)也与TableC有一对一的关系,所以我不能这样做 . 因此,我不得不在TableA和TableB中使用TableC的外键(这导致了JPA中的多对一关系) . 有没有其他方法来设计以保持一对一的关系?或者至少在生成的JPA实体中可以有一对一的关系?

1 回答

  • 0

    您可以将@OneToOne hibernate映射与@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数据库上测试了这个模式,它运行正常 .

相关问题