一共有三个表A和B1、B2:
A(id, b_id, control)
B1(id, other)
B2(id, other)
If control = 1, b_id in A is mapping to table B1;
If control = 2, b_id in A is mapping to table B2.
这三个类是这样的:
@Entity
@Table(name = "A")
public class A {
@Id
@Column(name = "id")
private Integer id;
private B b;
@Column(name = "control")
private Integer control;
}
@Entity
@Table(name = "B1")
public class B1 {
@Id
@Column(name = "id")
private Integer id;
@Column(name = "other")
private Integer other;
}
B2类与B1类几乎相同。
我需要从表 B1 或 B2 中获取由类 A 中的字段 control
确定的不同对象 B。是否可以使用 hibernate 注释来实现?
感谢任何建议。
最佳答案
我认为您错过了在 SQL 中一个表引用另一个表的方式。我的意思是你定义表的方式没有外键也没有 referential integrity安全。我强烈建议您重新考虑您的实现并在 A 表中添加相应的外键。
无论如何,如果你想继续这样下去,你应该看看SQL中的UNION语句。
SELECT A.id, B1.others
FROM A
INNER JOIN B1
ON A.control = 1 AND A.b_id= B1.id
UNION
SELECT A.id, B2.others
FROM A
INNER JOIN B2
ON A.control = 2 AND A.b_id= B2.id
现在我注意到 hql 中的 union 语句存在问题(我认为不支持?)但可能还有其他 implementations .
另请注意,您必须选择相同的列才能联合两个子查询。
关于java - 连接由控制字段确定的不同表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38221321/