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行附近