【发布时间】:2016-01-03 22:31:59
【问题描述】:
我构建了一个简单的Query,它通过搜索带有可能性列表的@Embeddable 字段来返回结果列表。查询是:
select d from data d where embedField in :embedValues
它工作正常,但是使用 hibernate 和 PostgreSQL 发出到 sql server 的结果本机查询是这样的:
select * from data where
f1=$1 and f2=$2
or
f1=$3 and f2=$4
or
f1=$5 and f2=$6
我本来希望本机查询更有效,例如,
select * from data where (f1,f2) in (($1,$2),($3,$4),($5,$6))
我写namedQuery 是因为我想要更好的性能,但我不认为我会在执行查询时得到它。有没有更好的方法可以轻松获得更符合我预期的原生查询?
为了完整起见,我添加了一些说明性类。
@Embeddable class Embed {
int f1;
int f2;
public Embed(int i, int j) {f1 = i; f2 = j;}
}
@Entity class Datum {
@Embedded Embed embedField;
}
class Test {
public static void main(String... args) {
new Test().run();
}
public void run() {
EntityManger em = ...
List<Datum> data = em.createQuery("select d from Data d where embedField in $1")
.setParameter(1, Arrays.asList(new Embed(1,2),new Embed(3,4),new Embed(5,6)))
.getResultList();
}
}
感谢您的帮助,不胜感激。
【问题讨论】:
标签: sql hibernate postgresql jpa