首页 > 解决方案 > 如何使用组合键映射表,其中一列是 Hibernate 上的外键

问题描述

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

数据库模式

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

请注意,数据库表和列名并不完全等于 Java 类和属性名。例如,java 类名是Order,表名是tb_order. 我只是认为这很重要,因为 Hibernate 推断的表/列名称可能不匹配(表列也是snake_case,而java类的属性将是camelCase)。

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

标签: javadatabasehibernateormhibernate-mapping

解决方案


尝试这个:

@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;
}

推荐阅读