jpb*_*ult 7 java jpql spring-data
我想知道是否可以在@Query注释中使用子查询(org.springframework.data.jpa.repository.Query;)
我在第一个子查询parentesis上得到QuerySyntaxException.
这是我的查询
@Query(value="select c1 from ComplaintModel c1, "
+ "(select c2.id, min(cb.termDate) minDate from ComplaintModel c2 "
+ "join c2.complaintBullets cb join cb.status s where s.code = ?1 "
+ "group by c2.id) tmp where c1.id = tmp.id order by tmp.minDate")
Run Code Online (Sandbox Code Playgroud)
谢谢!
Mik*_*unu 10
不,在JPQL查询的select子句中不可能有子查询.
JPQL支持WHERE和HAVING子句中的子查询.它可以是(至少)ANY,SOME,ALL,IN,EXIST表达式的一部分,当然它可以使用普通的条件表达式:
SELECT a
FROM A a
WHERE a.val = (SELECT b.someval
FROM B b
WHERE b.someotherval=3)
Run Code Online (Sandbox Code Playgroud)
我确实在 Spring-data jpa 中得到了预期的结果
public final static String FIND_BY_ID_STATE = "SELECT a FROM Table1 a RIGHT JOIN a.table2Obj b " +
"WHERE b.column = :id" +
"AND a.id NOT IN (SELECT c.columnFromA from a.table3Obj c where state = :state)";
@Query(FIND_BY_ID_STATE)
public List<Alert> findXXXXXXXX(@Param("id") Long id, @Param("state") Long state);
Run Code Online (Sandbox Code Playgroud)
在哪里
Table2Obj & Table3Obj 分别是实体Table1与Table2、Table3之间关系的映射。
定义如下。
@OneToMany(mappedBy = "xxx", fetch = FetchType.LAZY)
private Set<Table2> table2Obj = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22262 次 |
| 最近记录: |