java - hibernate API 中的 ElementCollection createAlias

标签 java hibernate criteria jpa-2.0

有谁知道 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/

相关文章:

java - 参数化注释 AspectJ 的表达式

java - 如何在 Play-With-Docker-Lab 中指定 java 的文件夹路径?

java - 内存问题: Storing high volume data in Map

java - 将具有外键的实体对象级联保存为复合主键的一部分

c# - 具有不同数量标准的“Then By”用法

mysql - Grails Criteria - 同一领域的多个功能

java - hibernate :获取太多行

java - 当我单击 RecyclerView 项目时, fragment 加载数据错误的数据

java - 如何将对象从 hibernate 状态拉出并放入内存中。我遇到 session 问题

java - 在 hibernate 聚合函数中使用函数作为参数