我在学习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?
通常,Stringtest1是这样使用的,但我想知道是否还有其他方式。
第二,如果在VO中可以提取,你能在@query中添加一个查询吗?这取决于Test4是否有值?
第三,如果我使用List<对象[]>,是否可以包括执行不在已创建实体中的查询的结果(例如,TEST_TABLE2中的test1,它不在TEST_TABLE1的实体中(?,
首先,是否可以从使用本机sql时接收的VO中提取test3?通常,Stringtest1是这样使用的,但我想知道是否还有其他方式。
是的,这是可能的。
必须使用,例如:#{[0].test3}
等于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中可以提取,你能在@query中添加一个查询吗?这取决于Test4是否有值?
你可以使用一个技巧,例如:
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<对象[]>,是否可以包括执行不在已创建实体中的查询的结果(例如,TEST_TABLE2中的test1,它不在TEST_TABLE1的实体中(?
对不起,我不明白第三个问题。
也许本教程将帮助您:https://www.baeldung.com/jpa-queries-custom-result-with-aggregation-functions