有谁知道 following question 的解决方案是否以及如何解决? (用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>();
现在我需要检索给定用户名是参与者的所有讨论。
如果我为 Participant 创建一个实体,这将很简单:
Criteria crit = getSession().createCriteria(Discussion.class);
crit.createAlias("participants", "p");
crit.add(Restrictions.eq("p.userName", portalUsername));
但我不能用非实体创建别名...
最佳答案
迟到的答案。
集合的正确属性名称(由 @ElementCollection 注释)是 "elements"
或常量 CollectionPropertyNames#COLLECTION_ELEMENTS .
尝试以下答案
Criteria crit = getSession().createCriteria(Discussion.class);
crit.createAlias("participants", "p");
crit.add(Restrictions.eq("p.elements", portalUsername));
或者改用常量COLLECTION_ELEMENTS
crit.add(Restrictions.eq("p." + CollectionPropertyNames.COLLECTION_ELEMENTS, portalUsername));
关于java - hibernate API 中的 ElementCollection createAlias,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4873021/