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一起使用)。



