加入由控制字段确定的不同表格

时间:2016-07-06 10:04:00

标签: java mysql hibernate

有三个表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注释来创建它?

赞赏任何建议。

1 个答案:

答案 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

另请注意,您必须选择相同的列才能合并两个子查询。