【问题标题】:Hibernate inner join using hql使用 hql 进行休眠内部连接
【发布时间】:2012-09-06 09:34:44
【问题描述】:

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

【问题讨论】:

    标签: hibernate inner-join


    【解决方案1】:

    请在 HQL 下方找到:

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

    【讨论】:

    • 我收到此错误:org.hibernate.hql.ast.QuerySyntaxException:意外令牌:在第 1 行,第 91 列附近打开
    【解决方案2】:

    再次阅读the documentation。您不应该在电话实体中拥有学生的 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'
    

    【讨论】:

    • 好的,谢谢..我怎么能在两张桌子上做同样的事情??
    • 当然可以:例如 phone.owner.school.country.name = 'USA'。这在优秀的 Hibernate 文档中有解释。阅读它。
    • 好的,谢谢..那么我们如何在休眠中为多对多关系迭代查询结果..我会尝试很多。但我无法实现。
    • 这是我的查询 String hql = "select e.employee_id,m.meeting_id from Employee e join e.meetings m";查询 = session.createQuery(hql);
    • 此查询返回List<Object[]>。每个 Object[] 都包含员工 ID 作为第一个元素,会议 ID 作为第二个元素。
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 2012-02-19
      • 2012-04-30
      • 1970-01-01
      • 2013-03-08
      • 2023-04-05
      相关资源
      最近更新 更多