有一個帶有“FK”列的表,其值可能指向 TableA 或 TableB,如下所示:
CREATE TABLE TableC (
"id" bigint GENERATED BY DEFAULT AS IDENTITY,
"linked_entity_id" integer,
"linked_entity_type" varchar(15),
...other columns
PRIMARY KEY ("id")
);
我正在努力在 JPA 中表示這一點。我希望 JPA 中的 TableA 和 TableB 物體都有一個串列。有沒有辦法做到這一點?
這是我的嘗試,將 TableC 物體建模如下:
@Entity
public class TableC {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long linkedEntityId;
@Enumerated(EnumType.STRING)
private LinkedEntityType linkedEntityType;
@ManyToOne
@JoinColumn(name = "linked_entity_id", referencedColumnName = "id", insertable=false, updateable=false)
private TableA tableA;
@ManyToOne
@JoinColumn(name = "linked_entity_id", referencedColumnName = "id", insertable=false, updateable=false)
private TableB tableB;
}
但是,當 TableC 有一行其 id 在linked_entity_id 列中屬于 TableA id 而不是 TableB 時會發生什么?我認為會拋出例外。
PS:TableA 和 TableB 沒有任何共同點。
uj5u.com熱心網友回復:
您必須使用@Where注釋:
@ManyToOne
@Where(clause = "linked_entity_type = 'TableA'")
@JoinColumn(name = "linked_entity_id", referencedColumnName = "id", insertable=false, updateable=false)
private TableA tableA;
@ManyToOne
@Where(clause = "linked_entity_type = 'TableB'")
@JoinColumn(name = "linked_entity_id", referencedColumnName = "id", insertable=false, updateable=false)
private TableB tableB;
來源:https ://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#pc-where
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/454160.html
上一篇:嘗試將SQL查詢轉換為JPA查詢
