java - 如何使用组合键映射表,其中一列是 Hibernate 上的外键
问题描述
我很难在 Hibernate 上映射以下数据库模式:
这tb_order
是一个现有的表,它已经映射到 Java 类上。该tb_external_order_details
表是最近创建的,它只有两列。这两列都是复合主键的一部分。该tb_order_id
列引用表上的列,而id
只是一个松散的 id,不引用数据库上的任何列。tb_order
external_order_id
请注意,数据库表和列名并不完全等于 Java 类和属性名。例如,java 类名是Order
,表名是tb_order
. 我只是认为这很重要,因为 Hibernate 推断的表/列名称可能不匹配(表列也是snake_case,而java类的属性将是camelCase)。
我尝试了许多关于堆栈溢出的解决方案,但都没有奏效。此外,在我发现的示例中,复合主键的任何列都不是引用另一个表的另一列的外键。
解决方案
尝试这个:
@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;
}
推荐阅读
- c - 斐波那契数列中的分段错误
- python - 按顺序返回项目序列的最快数据结构
- java - Java Streams -> 从列表中提取特定索引处的值
- >
- mysql - 布尔列的 AWS DMS 问题
- ibm-cloud - 找不到 Blockchain Cloud Foundry 应用
- python - 从外键获取用户对象
- python - 在 sorted 中使用 Lambda 函数
- c# - 具有多个对象或列表的类
- javascript - 如何用 input.value 上的另一个字母替换一个字母
- javascript - 使用 HTML、CSS 和 JavaScript 将 HTML 文本编辑器添加到网站中