我有一个实体MyEntity
,其中包含ElementCollection
地图,如下所示。
Map<String, MyEmbeddableObject>
,值是可嵌入对象MyEmbeddableObject
,键是&#39;字符串&#39;。
db表和JPA映射当前在系统中正常工作。我只需要一个查询来获取所需的信息。
假设MyEmbeddableObject
有一些&#39;字符串&#39;在其中的属性,有没有办法编写JPA NamedQuery,以便我可以根据MyEmbeddableObject
的属性比较过滤结果?
此外,查询应返回(select子句)MyEmbeddableObject
而不是MyEntity
。 findMyEmbeddableObjectByAttr1
是我尝试过但不起作用的。它抱怨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
任何帮助,非常感谢!感谢。