5

我是休眠的新手。例如,我有两个表,student并且phone number这两个表有一个共同的列,student id. 我想使用 Hibernate hql 对这两个表进行内部连接。

学生.java

{
   private int id;   
   private String name;   
}

电话.java

{
   private int pid;
   private int sid;  //same id in student.java 
   private int phone_number;
}
4

3 回答 3

6

再次阅读文档。您不应该在电话实体中拥有学生的 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'
于 2012-09-13T10:15:46.680 回答
3

有了像这样的两个类,hibernate 并没有意识到让生活变得困难的关联。正常的做法是让 phone 类中的 sid 成为实际的 Student 对象,以便 hibernate 知道该关联。例如

class Phone {
    @ManyToOne
    @Column(name = "sid")
    private Student student;
}

完成此操作后,您可以进行简单的 HQL 连接,例如

FROM Phone p
JOIN p.student s

或者,如果出于某种原因您需要对象中的原始 ID,那么您可以使用“theta join”,在其中明确指定关联,就像普通的 SQL 连接一样。例如

FROM Phone p, Student s
WHERE p.sid = s.id
于 2012-09-13T10:15:14.460 回答
-3

请在 HQL 下方找到:

SELECT * FROM student ST INNER JOIN phonenumber PN ON ST.id = PN.id where ST.Name='XXXX'

于 2012-09-13T10:28:15.477 回答