【发布时间】:2015-09-23 19:03:42
【问题描述】:
在我的 Java 应用程序中,我想创建 SQL 查询,最终将如下所示:
SELECT * FROM my_table t WHERE (t.a, t.b) IN ((a1,b1),(a2,b2),(a3,b3), ... )
如何生成?
我的代码如下所示:
public List<MyEntity> getMyEntity(List<Long> alist, List<Long> blist) {
String stringQuery = "SELECT * FROM my_table t WHERE (t.a , t.b) in (:alist, :blist)";
// This is kinda how I whould like my query to look, but I guess I will generate something like:
// SELECT * FROM my_table t WHERE (t.a, t.b) IN ((a1, a2, a3, ...), (b1, b2, b3, ...))
// which isn't the same and it isn't what I want
Query query = getEntityManager().createNativeQuery(stringQuery, MyEntity.class);
// I'm using native query because in my aplication above query is in fact much more complicated,
// and I can't use standard JPA query. I cut those parts here, because they aren't directly related to my problem
// in the other way that they force to use native query.
query.setParameter("alist", alist);
query.setParameter("blist", blist);
return query.getResultList();
}
【问题讨论】:
-
原生查询没有 NAMED 参数。它具有位置参数(如果您重视可移植性)。根据参数的数量生成 SQL。