有谁知道是否以及如何解决以下问题 https://stackoverflow.com/questions/2735071/hibernate-criteria-api-adding-a-criterion-string-should-be-in-collection(这是用JPA API编写的)可以使用hibernate criteria API编写吗?
更具体地说,我有一个讨论实体,其中包含参与者列表(这是用户名列表):
@ElementCollection
@Column(name = "user_name")
@CollectionTable(name = "DISCUSSION_USER", joinColumns = @JoinColumn(name = "DISCUSSION_ID"))
@OrderColumn(name = "ORDER_INDEX")
private List<String> participants = new ArrayList<String>();
现在我需要检索给定用户名是参与者的所有讨论。
如果我为参与者创建一个实体,这将很简单:
Criteria crit = getSession().createCriteria(Discussion.class);
crit.createAlias("participants", "p");
crit.add(Restrictions.eq("p.userName", portalUsername));
但我无法创建非实体的别名......
迟到的答复。
集合的正确 propertyName(注释为@ElementCollection) is "elements"
或常数CollectionPropertyNames#COLLECTION_ELEMENTS http://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/persister/collection/CollectionPropertyNames.html#COLLECTION_ELEMENTS.
尝试以下答案
Criteria crit = getSession().createCriteria(Discussion.class);
crit.createAlias("participants", "p");
crit.add(Restrictions.eq("p.elements", portalUsername));
或使用常量集合_元素 instead
crit.add(Restrictions.eq("p." + CollectionPropertyNames.COLLECTION_ELEMENTS, portalUsername));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)