标准 JPA 2,Hibernate - 多重连接
Posted
技术标签:
【中文标题】标准 JPA 2,Hibernate - 多重连接【英文标题】:Criteria JPA 2, Hibernate - multiples joins 【发布时间】:2014-12-29 12:48:39 【问题描述】:我一直在尝试进行以下查询,我尝试开始但我不知道从哪里开始。 考虑到每个表都有一个实体,如何使用 Criteria Builder 创建此查询?
SELECT *
FROM TCTIPort as CTIPort
INNER JOIN TCTIBoardType AS BoardType
ON CTIPort.BoardType = BoardType.BoardType
LEFT JOIN TSysPort AS Port
ON CTIPort.Switch = Port.Switch AND
CTIPort.Machine = Port.Machine AND
CTIPort.Port = Port.Channel
LEFT JOIN TSysMachineId AS Mach
ON Mach.IdApp = Port.IdApp AND
Mach.IdTypeApp = Port.IdTypeApp
LEFT JOIN TUnPbxGenericValue AS Gen
ON CTIPort.Machine = Gen.Machine AND
CTIPort.Port = Gen.Port
LEFT JOIN TUnPbxGenericName AS GName
ON GName.IdGenericName = Gen.IdGenericName
LEFT JOIN TSysTypeOfApp STA
ON STA.IdTypeOfApp = Port.IdTypeApp
LEFT JOIN TSysApplication AS SysApp
ON SysApp.IdApp = Port.IdApp
AND SysApp.idTypeOfApp = Port.idTypeApp
WHERE
LTRIM(RTRIM(BoardClass)) IN ('MSI', 'TAP') AND
CTIPort.Switch = @Switch AND
CTIPort.Machine = @Machine AND
(CTIPort.Port = @Port OR @Port IS NULL) AND
(Mach.Machine LIKE @NameMachine OR
Gen.GenericValue LIKE @NameMachine OR
@NameMachine IS NULL)
ORDER BY
CTIPort.Port
我应该为每一列使用接口“JOIN”吗? 如何将条件“AND”添加到联接中?
我搜索了一些示例,但它们只显示了简单的查询(没有“and”且没有更多表,最多 2 个)。
【问题讨论】:
【参考方案1】:JPA 2.0 不支持“JOIN + ON”。
您需要执行以下操作:
select p
from Person p
left join p.dogs d
where d.age = 15 and d.sex = 'MALE'
如果要在连接子句中添加条件,则需要使用 JPA 2.1
【讨论】:
以上是关于标准 JPA 2,Hibernate - 多重连接的主要内容,如果未能解决你的问题,请参考以下文章
EJB+JPA+DAO+Hibernate/MyBatis+Spring
JPA 2.0 (Hibernate) 使用 @JoinTable 为 @OneToMany 生成不正确的连接表 PK