栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

IN和MEMQ OF JPQL运算符之间有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

IN和MEMQ OF JPQL运算符之间有什么区别?

IN测试是您提供给查询(或通过子查询获取)的值中的单值路径表达式(实体的持久属性)的值。

MEMBER OF测试是您提供的值,用于查询(或使用表达式定义)实体中某些集合中的值成员。

让我们使用以下示例实体:

@Entitypublic class EntityA {    private @Id Integer id;    private Integer somevalue;    @ElementCollection    List<Integer> listOfValues;    public EntityA() { }    public EntityA(Integer id, Integer somevalue, List<Integer> listOfValues) {        this.id = id;        this.somevalue = somevalue;        this.listOfValues = listOfValues;    }}

以及以下测试数据:

EntityA a1 = new EntityA(1, 1, Arrays.asList(4, 5, 6));EntityA a2 = new EntityA(2, 2, Arrays.asList(7, 8, 9));

通过以下查询,我们得到a1作为结果,因为它的somevalue是(0,1,3)之一。在查询中使用文字(在 SELECt A FROM EntityA
WHERe a.somevalue IN(0,1,3)中
)产生相同的结果。

TypedQuery<EntityA> queryIn = em.createQuery(    "SELECt a FROM EntityA a WHERe a.somevalue IN :values", EntityA.class);queryIn.setParameter("values", Arrays.asList(0, 1, 3));List<EntityA> resultIn = queryIn.getResultList();

通过以下查询,我们得到a2作为结果,因为7是listOfValues中的值之一:

TypedQuery<EntityA> queryMemberOf = em.createQuery(    "SELECt a FROM EntityA a WHERe :value MEMBER OF a.listOfValues", EntityA.class);queryMemberOf.setParameter("value", 7);List<EntityA> resultMemberOf = queryMemberOf.getResultList();

此功能(包括作为参数的集合)在JPA 2.0规范中定义,并且不特定于Hibernate(例如,上面的代码可与Eclipselink一起使用)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496031.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号