我是Hibernate的新手。我有两个表,例如student
和phone number
,这两个表有一个共同的列student id
。
我想使用Hibernate hql对这两个表进行内连接。
student.java
{
private int id;
private String name;
}
phone.java
{
private int pid;
private int sid; //same id in student.java
private int phone_number;
}
答案 0 :(得分:6)
再次阅读the documentation。您不应该在Phone实体中拥有学生的ID。相反,你应该在两个实体之间建立关联:电话属于学生:
public class Phone {
@Id
private Integer id;
private String phoneNumber;
@ManyToOne
private Student owner;
}
只有这样你才能使用连接:
// selects all the phones belonging to the students named 'John'
select phone from Phone phone where phone.owner.name = 'John'
答案 1 :(得分:3)
对于这两个类,hibernate并不知道让生活变得困难的关联。什么是正常的是使手机类中的sid成为一个真正的Student对象,所以hibernate知道这种关联。 e.g。
class Phone {
@ManyToOne
@Column(name = "sid")
private Student student;
}
完成此操作后,您就可以进行简单的HQL连接,例如
FROM Phone p
JOIN p.student s
或者,如果您有某种原因需要对象中的原始ID,那么您可以使用“theta join”,您可以在其中显式指定关联,就像正常的SQL Join一样。 E.g。
FROM Phone p, Student s
WHERE p.sid = s.id
答案 2 :(得分:-3)
请在下面找到HQL:
SELECT * FROM student ST INNER JOIN phonenumber PN ON ST.id = PN.id,其中ST.Name ='XXXX'