JPA查询根据Embeddable对象的属性筛选结果,该对象是实体模型对象中@ElementCollection Map的值

时间:2015-09-18 19:20:13

标签: java jpa

我有一个实体MyEntity,其中包含ElementCollection地图,如下所示。 Map<String, MyEmbeddableObject>,值是可嵌入对象MyEmbeddableObject,键是&#39;字符串&#39;。 db表和JPA映射当前在系统中正常工作。我只需要一个查询来获取所需的信息。

假设MyEmbeddableObject有一些&#39;字符串&#39;在其中的属性,有没有办法编写JPA NamedQuery,以便我可以根据MyEmbeddableObject的属性比较过滤结果? 此外,查询应返回(select子句)MyEmbeddableObject而不是MyEntityfindMyEmbeddableObjectByAttr1是我尝试过但不起作用的。它抱怨JPA Query Grammar是错误的。

我可以使用Native查询完成它,但理想情况下我希望能够使用JPA NamedQuery来完成与Native查询相关的所有缺点。

  @Entity
  @NamedQueries({
  @NamedQuery(name = "findMyEmbeddableObjectByAttr1",
         query = "Select n from MyEntity v, in (v.myMap) n WHERE n.attr1 = :someUserPassedValue")
    })
  public class MyEntity {

    @ElementCollection
    @MapKeyColumn(name="someKey")
    private Map<String, MyEmbeddableObject> myMap;
  }

  @Embeddable
  public class MyEmbeddableObject {
      private String attr1;
      private String attr2;
  }

我的所有SO搜索和Google搜索都显示了如何编写查询以通过Map的键过滤或比较整个Map值对象。如果值是String,int等基本类型,则Map值的比较是一个简单的选项。但就我而言,它是一个复杂的对象。

这些SO问题是我能得到最接近答案的问题:

Execute "MEMBER OF" query against 'ElementCollection' Map fields in JP-QL (JPA 2.0)

LIKE query on values of Map ElementCollection in entity in HQL

任何帮助,非常感谢!感谢。

0 个答案:

没有答案