0

我在学习JPA的过程中遇到了各种各样的事情,但是我对它太陌生了,所以我想得到一些建议。

我在学习期间陷入的部分分为三个主要类别。你能看看下面的代码吗?

@Repository
public interface TestRepository extends JpaRepository<TestEntity,Long> {
    @Query(" SELECT
             , A.test1 
             , A.test2
             , B.test1 
             , B.test2
             FROM TEST_TABLE1 A
             LEFT JOIN TEST_TABLE2 B
             ON A.test_no = B.test_no
             WHERE A.test3 = ?1   # Here's the first question
             if(VO.test4 is not null) AND B.test4 = ?2") # Here's the second question
    List<Object[] # Here's the third question> getTestList(VO);
}

首先,是否可以从使用原生sql时收到的VO中提取test3?

通常,String test1是这样使用的,但我想知道除此之外是否还有其他方法。

其次,如果在VO中可以提取,是否可以根据Test4是否有价值在@QUERY中添加查询?

第三,如果我使用List<Object[]>,是否可以包含执行不在已创建实体中的查询的结果(例如,TEST_TABLE2中的test1,它不在TEST_TABLE1的实体中)?

4

1 回答 1

1

首先,是否可以从使用原生sql时收到的VO中提取test3?通常,String test1是这样使用的,但我想知道除此之外是否还有其他方式。

对的,这是可能的。

您必须使用,例如 where :#{[0].test3}is equals vo.test3 [0] 是第一个参数的位置,过去用于使用 @Query 注释的方法

@Query(value = "SELECT a.test1, a.test2, b.test1, b.test2 
FROM test_table1 a 
LEFT JOIN test_table2 b ON a.test_no = b.test_no 
WHERE a.test3 = :#{[0].test3}", nativeQuery = true)
List<Object[]> getList(VO);

其次,如果在VO中可以提取,是否可以根据Test4是否有价值在@QUERY中添加查询?

您可以使用一个技巧,例如:

SELECT ... FROM table a
LEFT JOIN table b ON a.id = b.id
WHERE a.test3 = :#{[0].test3}
AND (:#{[0].test4} IS NOT NULL AND b.test4 = :#{[0].test4})

第三,如果我使用List<Object[]>,是否可以包含执行一个不在已经创建的实体中的查询的结果(例如,TEST_TABLE2中的test1,它不在TEST_TABLE1的实体中)?

对不起,但我不明白第三个问题。

也许本教程会对您有所帮助:https ://www.baeldung.com/jpa-queries-custom-result-with-aggregation-functions

于 2021-06-09T10:16:08.303 回答