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

如何在Hibernate上映射具有复合键且其中一列为外键的表

萧韬
2023-03-14

我很难在Hibernate上映射以下数据库模式:

tb_order是一个现有的表,它已经映射到Java类上。tb_external_order_details表是最近创建的,它只有两列。这两列都是复合主键的一部分。tb_order_id列引用tb_order表上的id列,而external_order_id只是一个不引用数据库上任何列的松散id。

请注意,数据库表和列名与Java类和属性名并不完全相同。e、 g.java类名为顺序,表名为tb\u顺序。我认为这一点很重要,因为Hibernate推断出的表/列名可能不匹配(表列也是snake\u case,而java类的属性是camelCase)。

我尝试了许多在堆栈溢出上找到的解决方案,但没有一个奏效。此外,在我发现的示例中,复合主键的任何列都不是引用另一个表的另一列的外键。

共有1个答案

轩辕成天
2023-03-14

尝试以下操作:

@Entity
public class Order {
    @Id
    Integer id;
    String type;

    @OneToMany(mappedBy = "order")
    Set<ExternalOrderDetails> externalOrderDetails;
}
@Entity
public class ExternalOrderDetails {
    @EmbeddedId
    ExternalOrderDetailsId id;
    @ManyToOne(fetch = LAZY)
    @JoinColumn(name = "tb_order_id", insertable = false, updatable = false)
    Order order;
}
@Entity
public class ExternalOrderDetailsId {
    @Column(name = "tb_order_id")
    Integer orderId;
    @Column(name = "external_order_id")
    Integer externalOrderId;
}
 类似资料:
  • 问题内容: 我在这里搜索,但未找到任何类似的主题,因此我发布了一个新问题。 我正在使用现有数据库上的Hibernate。我们不允许更改表的结构和数据。该应用程序正在从数据库读取数据,并根据某种逻辑迁移到另一个数据存储。 现在的问题是关于复合PK映射。例如 表A具有复合PK。 表B也有一个复合PK,此复合PK的一部分是A的PK,此处也用作FK。 我尝试了几种方法,但都无济于事。谁能告诉一个有效的Hi

  • 问题内容: 我在为某些实体设置jpa映射时遇到麻烦。我有一个如下定义的父实体。 然后,我有一个带有复合键的子实体,以及此表的主键的外键,如下所示: 我知道子实体不正确,但是我不确定如何将其设置为具有复合PK。我知道我需要设置一个PK类,但是当一个字段是父类的外键时,我不确定该怎么做。一旦设置好,父级将如何引用子级实体? 任何帮助表示赞赏。 问题答案: 这受JPA 2规范的 第2.4.1节“与派生身

  • 问题内容: 我试图弄清楚如何构建JPA实体bean,以使数据适用于我的设备。该数据库是旧的,一成不变的,所以我不能更改架构。设备模型具有复合主键,其中的一列是设备类型的FK。 我尝试了几种不同的方法。首先是设备具有DeviceModel和DeviceType,但是这给了我一个错误,那就是太多的东西在引用dev_type。因此,然后我尝试让DeviceModel引用DeviceType,但遇到了相同

  • 我有以下MySQL表。这里的思想是轨道和课程是主键。并且轨道中的一个航向可能依赖于“同一轨道”中的另一个航向,因此我在(,)上创建了一个复合FK 但我在“depends_on_course_id column”中得到的结果都是空的,我猜getTrackCourse方法的映射有问题,但我不知道是什么?非常感谢任何帮助。

  • 我正在尝试我们非主键作为外键在我的应用程序。场景如下:我有EMPLOYEE和EMPLOYEE_PROPERTIES表。Employee和Employee属性之间存在一对多的关系。下面是我的架构: 下面是我的hibernate映射XML:------------------------------- -------------员工属性------------------- 是否可以引用非主键作为外键

  • 我的数据库是: 我们可以在Table2中为Table1中的1设置多行。 我的TABLE1实体是: 我的Table1Id类是: 我的TABLE2实体是: 我的Table2Id类是: 当我尝试启动我的tomcat时,我有以下错误: 我尝试使用引用列,主键连接列和许多其他东西,但是通过在互联网上阅读它,它可以解决数据库建模问题。我认为问题是主键和外键在2个表中具有相同的名称,但我可能是错的......我