Java 使用Hibernate NamedNativeQuery,如何绑定这些参数:其中(p1,p2)位于((v1_1,v1_2),(v2_1,v2_2))
我想编写一个NativeNamedQuery,它允许我执行以下操作:Java 使用Hibernate NamedNativeQuery,如何绑定这些参数:其中(p1,p2)位于((v1_1,v1_2),(v2_1,v2_2)),java,hibernate,Java,Hibernate,我想编写一个NativeNamedQuery,它允许我执行以下操作: 从my_表中选择*,其中(c1,c2)位于((“v1_1”,“v1_2”),(“v2_1”,“v2_2”),…); 这就是我被卡住的地方: @namednaviequiries({ @命名设备( name=“MyQuery”, query=“从我的表格中选择*,其中(:v1,:v2));”, 结果映射=“MyMapper”) }) 如何绑定值的组合?即: publicslist某物(){ //这显然是错误的,能做到吗?
从my_表中选择*,其中(c1,c2)位于((“v1_1”,“v1_2”),(“v2_1”,“v2_2”),…);
这就是我被卡住的地方:
@namednaviequiries({
@命名设备(
name=“MyQuery”,
query=“从我的表格中选择*,其中(:v1,:v2));”,
结果映射=“MyMapper”)
})
如何绑定值的组合?即:
publicslist某物(){
//这显然是错误的,能做到吗?
返回(列表)getNamedQuery(“MyQuery”)
.setParameter(新字符串[]{“v1”、“v2”},新对象[]{新字符串[]{“v1_1”、“v1_2”},新字符串[]{“v2_1”、“v2_2”},…})
.list();
}
重要提示:值组合的数量必须是可变的。这意味着我需要能够对参数集
新对象[]{new String[]{“v1_1”,v1_2}}
或新对象[]{new String[]{“v1_1”,“v1_2”},新字符串[]{“v2_1”,“v2_2”}
更新我自己下面问题的解决方案。这并不漂亮,但它很好用
@namednaviequiries({
@命名设备(
name=“MyQuery”,
query=“从我的表格中选择*,其中c1位于(:v1)”+
“和c2英寸(:v2)”+
以及(:concatV1V2)中的concat(c1,“~”,c2),
结果映射=“MyMapper”)
})
返回(列表)getNamedQuery(“MyQuery”)
.setParameter(“v1”,新字符串[]{“v1_1”,“v2_1”})
.setParameter(“v2”,新字符串[]{“v1_2”,“v2_2”})
.setParameter(“concatV1V2”,新字符串[]{“v1_1~v1_2”,“v2_1~v2_2”})
.list();
我仍然使用v1和v2列的原因是为了性能,因为它们可以被索引。我们首先缩小到一小部分行,然后使用结果上的(非索引)concat将其缩小到所需的行