【问题标题】:How to write an inner join query to retrieve all records of three tables in Hibernate?如何编写一个内连接查询来检索Hibernate中三个表的所有记录?
【发布时间】:2018-04-13 09:57:30
【问题描述】:

我想从 3 个表中检索所有记录:Personal_Info、Address 和 Fitness。我的主键是 Personal_Info 表中的 CandidateID,外键是 Address 表中的 CandidateID,以及 Fitness 表中的 UserID。

我已经编写了如下内部查询,这似乎是不正确的,因为我没有从三个表中获取所有记录。

public void getAllRecords()
{
int searchId = 1;
Session currentSession = sessionFactory.getCurrentSession();
String query = "FROM Address as a, Fitness as f inner join a.personalInfo as p inner join f.personalInfo as p where p.candidateID=:userID";
Query theQuery = currentSession.createQuery(query);
theQuery.setParameter("userID", searchId);

List<?> list = theQuery.list();
         for(int i=0; i<list.size(); i++) {
                Object[] row = (Object[]) list.get(i);
                System.out.println("Record"+i+": "+row[i]);
         }
}

如何更正这个内部查询?

【问题讨论】:

    标签: spring hibernate model-view-controller


    【解决方案1】:

    您必须使用 CandidateID 连接所有三个表。 试试这个:

    FROM Address as a, Fitness as f, Personal_Info as p
    WHERE p.CandidateID = a.CandidateID
    AND p.CandidateID = f.UserID
    

    【讨论】:

    • 此查询不起作用,因为它无法从地址和健身表中找到“CandidateID”。对于这些外键,我在实体表中有一对一的映射。例如:@OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="CandidateID_FK") private PersonalInfo personalInfo;我在 DAO impl 类中编写了如下查询: String query = "FROM Address a JOIN PersonalInfo p ON a.CandidateID_FK = p.candidateID JOIN Fitness f ON f.CandidateID_FK1 = p.candidateID";控制台错误:org.hibernate.hql.internal.ast.QuerySyntaxException:无法解析属性:CandidateID_FK
    • 也试过下面的查询,但它没有给出任何输出 - FROM Fitness as f,Address as a,PersonalInfo as p inner join f.personalInfo as fp inner join a.personalInfo as ap
    • @JayeshB 可以分享一下表结构吗?
    • 表:1 创建表 personal_info (CandidateID int(11) 非空,主键 (CandidateID)) 表:2 创建表 address_details (AddressID int(11 )不为空,键CandidateID_idxCandidateID),约束CandidateID外键(CandidateID)参考personal_infoCandidateID)在删除时不执行更新不执行操作)表:3创建表@987653 @ (FitnessID int(11) NOT NULL, CONSTRAINT UserID FOREIGN KEY (UserID) 参考personal_info (CandidateID) ON DELETE NO ACTION ON UPDATE NO ACTION)
    • @JayeshB 根据您的表结构,列名 CandidateID_FK 和 CandidateID_FK1 在任何表中都不存在。因此出现错误 org.hibernate.hql.internal.ast.QuerySyntaxException: could not resolve property: CandidateID_FK
    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 2018-12-28
    • 2020-05-11
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多