我正在使用JPA和Hibernate。
我有这些表格:
ORDER
----------------------------
ID | COL A | COL B | COL C |
1 | | | |
2 | | | |
ORDER_FLOW
----------------------------
ID | ORDER_ID | ...........|
1 | NULL | ...........|
2 | 1 | ...........|
我想生成一个映射,以便第一个订单(order.id = 1)引用第二个order_flow(order_flow.id = 2),第二个订单(order.id = 2)回退到第一个order_flow因为NULL FK。
基本上我想映射到默认的order_flow记录,如果不存在特定的记录。
这是不可能的映射吗?有人可以提出更好的方法吗?
提前致谢!
答案 0 :(得分:0)
您可以通过以下方法之一来完成:
第一个是容易理解的,所以让我们谈谈第二个。我不确定它是否真的有效,但我认为它可能。因此,您在DB中设置默认值,如果第一个实体在没有附加实体的情况下保存,它将获得默认的第二个实体ID,反之亦然。
此外,您可能需要@DynamicInsert
注释才能在非可空fk列上明确保存null。
答案 1 :(得分:0)
也许我找到了一个解决方案,不知道它是否会破坏某些东西......
@Entity
public class Order {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)")
private UUID id;
@ManyToOne
@JoinFormula("(SELECT of.id FROM order_flow of WHERE of.order_id = id OR of.order_id is null order by of.order_id desc LIMIT 1)")
private OrderFlow orderFlow;
}
@Entity
public class OrderFlow {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)")
private UUID id;
@OneToOne
private Order order;