当前位置: 首页 > 知识库问答 >
问题:

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

苏宾鸿
2023-03-14

我有一个情况,几个表(TableA

TableA
- key
- something
- c_ref_key

TableB
- key
- something
- c_ref_key

TableC
- key
- something

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

共有1个答案

郎建章
2023-03-14

您可以使用@OneToOne hibernate映射和@JoinColumn来创建外键。下面是schema的基本实现,您可以根据需要进行扩展。

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数据库上测试了这个模式,它运行良好。

 类似资料:
  • 问题内容: 任何人都可以解释在设计带有示例的表时如何实现一对一,一对多和多对多关系吗? 问题答案: 一对一: 使用外键访问被引用的表: 您还必须在外键列()上设置唯一约束,以防止子表()中的多行与引用表()中的同一行相关。 一对多 :在关系的许多方面使用外键链接回“一个”侧: 多对多 :使用联结表(例如): 查询示例:

  • 如果在中只有一组,这将非常好地工作。ASSESSMENT_COMMENT只有两列: 它将完美地代表一对多的关系。 现在问题来了: 那么,1)这是Hibernate中已知的bug吗?2)有办法解决这个问题吗?我可以强制Hibernate创建两个映射表,每个映射表一个吗?请记住,我不能更改类来引用(业务逻辑需求)

  • 我有3个表、、。 是表中的主键,也是、表中的主键和外键。我有一个sql,它在这三个表上留下了外部连接,以从三个表中获取不同的列值。 问题:/表首次为空。这2个表将由其他进程更新。在对obj执行一些udpates并将其保存后,创建了一个新行和,其cstid为。 注意:对于表中的特定,存在一行或多行 必需的解决方案:我不希望在/表中保留一行,除非在/中存在来自的的一行。 映射:customer.hbm

  • 问题内容: 我有一个使用联接表建模的一对多关系: 这些表应该模拟一个t1与多个t2的关系。使用JPA为这些表建模的正确方法是什么? 问题答案: 一个T1到多个T2的典型表是在T2上有一个指向T1的外键。通常不需要T1_T2表。 这样,JPA结构将是一对多的,可能是双向的。 可能会有一些安排,以使您描述的结构起作用。您可以更改T1_T2: 在T2上添加唯一约束(以便仅允许一个T2) 那真的是你想要的

  • 有一个应用程序需要像搜寻列表这样的东西。这个应用程序可以用不同的配置多次启动。有没有办法跨JVM共享数据结构。在JVM中是有效的。有一个数据库可以解决这个问题。但是,有没有更简单、更快速的方法?

  • 基本上,我想影响公司和个人的地址。地址是独立的实体。 提前致谢