有三个表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几乎相同。
我需要从表A中的字段control
确定的表B1或B2中获取不同的对象B.是否可以使用hibernate注释来创建它?
赞赏任何建议。
答案 0 :(得分:0)
我认为你错过了一个表在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。
另请注意,您必须选择相同的列才能合并两个子查询。