使用Spring在JpaRepository中可以使用IN子句和JOIN进行查询吗?

时间:2018-12-10 14:32:23

标签: java spring spring-data-jpa jpql

当我尝试列出JPQL或本机查询中的元素时,我的列表返回了0个元素。当我直接在数据库中进行查询时,查询就可以了:

@Query(value = "SELECT xml FROM CapturaXml xml  
            JOIN xml.capturaDados dados ON dados.chnfe = xml.chnfe   
            WHERE xml.chnfe IN (:chnfes) AND dados.capturaCerts.cnpj = :cnpj")  
Page<CapturaXml> findByCnpjInChnfes(@Param("cnpj") String cnpj, @Param("chnfes") List<String> chnfes, Pageable pageable);

或此代码:

@Query(value = "SELECT xml FROM CAPTURA_XML xml  
            JOIN CAPTURA_DADOS dados ON dados.chnfe = xml.chnfe  
            WHERE dados.cnpj = :cnpj AND xml.chnfe IN (:chnfes)",  
nativeQuery = true)  Page<CapturaXml> findByCnpjInChnfes(@Param("cnpj") String cnpj, @Param("chnfes") List<String> chnfes, Pageable pageable);

我的测试:

@Test
    public void testBuscarPorCnpjEChnfes() {
        List<String> chnfes = Arrays.asList(CHNFE1, CHNFE2, CHNFE3, CHNFE4);

        @SuppressWarnings("deprecation")
        PageRequest page = new PageRequest(0, 10);
        Page<CapturaXml> xmls = this.capturaXmlRepository.findByCnpjInChnfes(CNPJ, chnfes, page);

        assertEquals(4, xmls.getTotalElements());
    }

我的测试删除了列表0元素,但是当我放置List<CapturaXml> list = this.capturaXmlRepository.findAll();时,元素在列表中。

我的查询有什么问题?

肥胖: 1:我尝试制作Fetch Eager,但没有解决问题。

1 个答案:

答案 0 :(得分:0)

我建议检查Spring Data版本和使用的@Query软件包。 Spring Data使用自己的@Query注释。