0
我建立了一個簡單的Query
返回通過的可能性列表搜索的@Embeddable
領域的結果列表。查詢是:JPA其中嵌入優化(休眠和PostgreSQL)
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();
}
}
感謝您的任何幫助,讚賞。