【问题标题】:How to do inner join on different db tables in springboot jpa如何在spring boot jpa中对不同的数据库表进行内部连接
【发布时间】:2019-07-04 09:29:50
【问题描述】:

我想用springboot jpa实现下面的查询,可以吗??

    select * from 
    Claims.misuser.CLXMstApplicationRole AR WITH (NOLOCK) INNER JOIN 
    PADB.misuser.clxmstaccesspermission AP WITH (NOLOCK) ON 
    AP.intApplicationRoleId = AR.intApplicationRoleId 
    where AR.txtApplicationRoleCode = 'CRUAPP'

我在我的存储库界面中编写了以下代码

@Query(value=QueryConstants.InnerJoin_AppRole_AccessPermission)
List<ApplicationRole> findBy_InnerJoin_AppRole_AccessPermission();

QueryConstants.java

 InnerJoin_AppRole_AccessPermission="select AR FROM com.infosys.claims.broadband.springboot.entity.claims.ApplicationRole AR "+
                                                                  "INNER JOIN com.infosys.claims.broadband.springboot.entity.padb.AccessPermission AP"+
                                                                  "ON AR.applicationRole = AP.applicationRoleId" + 
                                                                  "where AR.applicationRoleCode = 'CRUAPP' ";

但这给了我空列表,在 mssql 中,它给了我记录。

【问题讨论】:

    标签: inner-join spring-boot-jpa


    【解决方案1】:

    您可以按原样使用查询。

    @Query(value = "select * from 
        Claims.misuser.CLXMstApplicationRole AR WITH (NOLOCK) INNER JOIN 
        PADB.misuser.clxmstaccesspermission AP WITH (NOLOCK) ON 
        AP.intApplicationRoleId = AR.intApplicationRoleId 
        where AR.txtApplicationRoleCode = (?1)", nativeQuery = true)
    List<ApplicationRole> findBy_InnerJoin_AppRole_AccessPermission(ApplicationRoleCode crudApp); 
    

    只需将变量crudApp的值设置为"CRUAPP"即可。

    上面代码中的,nativeQuery = true) 如果您对您的查询有信心,那将非常容易!

    【讨论】: