在没有直接连接的情况下休眠加入查询



>我有以下实体类

public class Customer {
@Id
private int id;
@Column(name = "CID")
private String cid;
}

public class Alccs {
@Id
private int vid;
//    @Column(name = "CID")
//    private String cid;
@ManyToOne
@JoinColumn(name = "CID", referencedColumnName = "CID")
private Customer customer;
}

public class Rtwo {
@Id
private int jobNo;
@ManyToOne
@JoinColumn(name = "CID", referencedColumnName = "CID")
private Customer customer;
}


public class RTwoCycle {
@Id
private int cycleJobNo;
@Column
private int vid;
@ManyToOne
@JoinColumn(name = "JobNo", referencedColumnName = "JobNo")
private TblRtwo tblRtwo;
}

如何使用HQLcriteria编写如下所示的查询

select top 20 * from RTwoCycle rtCycle join Alccs al on rtCycle.vid = al.vid;

对于 HQL,我尝试遵循

from TBLRTwoCycle rtCycle join TBLAL al on rtCycle.vid = al.vid

但是得到QuerySyntaxException: Path expected for join!错误

关于我不知道该怎么做的标准

怎么做??

早于 5.1 的 JPA 和 Hibernate 版本需要定义的关系才能在 JPQL 查询中联接两个实体。这通常会导致级联 JOIN 语句遍历实体之间的关系图,或者如果实体之间没有关系,则无法使用 JPQL 对实体进行 JOIN 的语句。

Hibernate 5.1 在不相关的实体上引入了显式连接。该语法与 SQL 非常相似,允许您在 ON 语句中定义 JOIN 条件。

更多信息

  1. from RTwoCycle as rtCycle inner join Alccs as al with rtCycle.vid = al.vid

对于HQL简单的连接和on clause就足够

from table1 as t1 inner join table2 as t2 on t1.vid=t2.vid

from table1 as t1, table2 as t2 where t1.vid=t2.vid

对于标准Restriction.sqlRestriction是此问题的解决方案

session.createCriteria(Class1,"c1")
.createAlias("class2", "c2")
.add(Restrictions.sqlRestriction("c1.vid=c2.vid")

最新更新