Hibernate 使用hql休眠内部联接

Hibernate 使用hql休眠内部联接,hibernate,inner-join,Hibernate,Inner Join,我刚开始冬眠。我有两个表,例如,student和phone number,这两个表有一个公共列,student id。 我想使用HibernateHQL对这两个表进行内部连接 student.java { private int id; private String name; } phone.java { private int pid; private int sid; //same id in student.java private int

我刚开始冬眠。我有两个表,例如,
student
phone number
,这两个表有一个公共列,
student id
。 我想使用HibernateHQL对这两个表进行内部连接

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;
}

对于这样的两个类,hibernate不知道使生活变得困难的关联。正常的做法是将phone类中的sid设置为实际的学生对象,以便hibernate知道关联。e、 g

class Phone {
    @ManyToOne
    @Column(name = "sid")
    private Student student;
}
完成此操作后,您可以执行一个简单的HQL连接

FROM Phone p
JOIN p.student s
或者,如果出于某种原因需要在对象中使用原始ID,则可以使用“θ连接”,在该连接中,可以像普通SQL连接一样显式指定关联。例如

FROM Phone p, Student s
WHERE p.sid = s.id
再读一遍。你不应该在电话实体中有学生的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'

请查看以下HQL:


选择*FROM student ST internal JOIN phonenumber PN ON ST.id=PN.id where ST.Name='XXXX'

好的,谢谢..我如何在两个以上的表中执行相同的操作?当然可以:where phone.owner.school.country.Name='USA'例如。优秀的Hibernate文档对此进行了解释。阅读它。好的,谢谢..那么我们如何在hibernate中迭代多对多关系的查询结果..我会尝试很多。但我无法实现。这是我的查询字符串hql=“从employee e中选择e.employee\u id,m.meeting\u id加入e.meetings m”; query=session.createQuery(hql);此查询返回一个
列表
。每个对象[]包含作为第一个元素的员工ID,以及作为第二个元素的会议ID。我发现以下错误:org.hibernate.hql.ast.QuerySyntaxException:意外标记:位于第91列第1行附近