没有直接连接的Hibernate连接查询
Hibernate join query without direct connection
我有以下实体 class
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;
}
如何使用 HQL
和 criteria
编写如下查询
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 条件。
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")
我有以下实体 class
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;
}
如何使用 HQL
和 criteria
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 条件。
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")