Java 连接由控制字段确定的不同表

Java 连接由控制字段确定的不同表,java,mysql,hibernate,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")

有三个表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中获取不同的对象B,这些对象由类A中的字段
控件
确定。是否可以使用hibernate注释进行设置


非常感谢您的建议。

我认为您错过了SQL中一个表引用另一个表的方式。我的意思是,您定义表的方式没有外键,也没有安全的。我强烈建议您重新考虑您的实现,并在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语句有一个问题(我想不支持?),但可能还有其他问题


还要注意,为了合并两个子查询,您必须选择相同的列。

我认为您遗漏了SQL中一个表引用另一个表的方式。我的意思是,您定义表的方式没有外键,也没有安全的。我强烈建议您重新考虑您的实现,并在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语句有一个问题(我想不支持?),但可能还有其他问题


还请注意,为了合并两个子查询,您必须选择相同的列。

A join B1 on(cotrol=1…)union A join B2 on(control=2…)
太好了,谢谢@sagi,所以我至少可以使用HQL。
A join B1 on(cotrol=1…)union A join B2 on(control=2…)
太好了,谢谢@sagi,所以我至少可以用HQL来完成。