是否有可能运行针对关联数组查询“成员”?如果是这样,这是什么语法是什么样子?最明显的解决方法是一个本机查询但得到所有的连接和这种相当混乱的。我想测试地图的按键,收藏价值或条目集内的物体的存在。也许类似如下:

SELECT p FROM Person p WHERE 'home' MEMBER OF p.phoneNumbers.keySet
SELECT p FROM Person p WHERE '867-5309' MEMBER OF p.phoneNumbers.values
SELECT p FROM Person p WHERE {'home' -> '867-5309'} MEMBER OF p.phoneNumbers

供应商无关的代码可能是过分的要求;确实的EclipseLink支持此?

有帮助吗?

解决方案

JPQL有一个名为index()函数,它是用于获取索引在@OrderColumn列表是有用的。而当你自己说,地图也被称为关联数组和地图键对应于数组索引。所以没有什么能够阻止从index()返回映射条目的关键。

此查询工作完全上休眠

SELECT p FROM Person p, in (p.phoneNumbers) number 
WHERE number = '867-5309' AND index(number) = 'home'

其他提示

它应该工作:

SELECT p FROM Person p 
WHERE (select count(*) from p.phoneNumbers where name='home' and value='867-5309') > 0

在接下来的查询工作对我来说:

select model from AnsOutboxMsg model 
left join fetch model.updateEntity upde 
left join fetch upde.update upd 
left join fetch model.ansMessage msg 
left join fetch msg.template msgt 
left join fetch msg.ansAction act 
left join fetch act.ansRule rl 
left join fetch rl.app app  
where (select count(*) from model.contextMap where name = 'fltClient' and value = 'XXX') > 0 and model.status = 'sent' and app.id = 'SPN_TICKETS' and msgt.name = 'Client' order by model.modifDate DESC, model.id ASC

在JPA(2)规范没有定义它的语法为地图的会员中使用(您最初指的是阵列,但我没有看到相关性,如果你有一个地图) ,因此你可以不依赖于任何语法是适用于所有的JPA实现。由于JPQL不支持这样的keySet Java方法,值,那么我看不出这些是可能的。更可能它只能支持一个值存在检查,等

'867-5309' MEMBER OF p.phoneNumbers

作为参考,在JDOQL,你会做

p.phoneNumbers.containsKey('home');
p.phoneNumbers.containsValue('867-5309');
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top