标准 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

从 Hibernate 标准到 JPA 标准或 QueryDSL

JPA(Hibernate)

jpa 2条件hibernate 5.2嵌套连接

单表继承(休眠)的 JPA 2 标准查询