使用hql进行Hibernate内连接

时间:2012-09-13 10:05:13

标签: hibernate inner-join

我是Hibernate的新手。我有两个表,例如studentphone 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;
}

3 个答案:

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