【问题标题】:Hibernate criteria query with collection of basic values具有基本值集合的休眠条件查询
【发布时间】:2014-09-24 14:23:08
【问题描述】:

我是 Hibernate 的新手,尤其是 Criteria API 中的新手,但我找不到我的问题的答案。 这是简化的域类:

@Entity
public class HDNewsPost implements Serializable {
    @Id
    private Long id;

    //other fields
    //..    

    @ElementCollection
    @CollectionTable(name = "SD_SOLUTION.PBITSM_HD_NEWS_RECIPIENT_CODES",
            joinColumns = @JoinColumn(name = "POST_ID"))
    @Column(name="POSITION_CODE")
    private List<String> recipientCodes;

    //getters and setters
}

如果收件人代码集合中存在某个值(字符串代码),我需要对将满足的条件进行限制。

【问题讨论】:

标签: java database hibernate criteria


【解决方案1】:

我解决了我的任务!这是完整的标准查询,其中部分我有问题:

final Criteria criteria = sessionFactory.getCurrentSession().createCriteria(HDNewsPost.class);
criteria.setFirstResult(startFrom);
criteria.setMaxResults(maxResults);
criteria.addOrder(Order.desc("publicationDate"));

if (code != null) {
    criteria.createAlias("recipientCodes", "rc", CriteriaSpecification.LEFT_JOIN);
    criteria.add(Restrictions.or(Restrictions.isEmpty("recipientCodes"),
        Restrictions.eq("rc.elements", code)));
}

return criteria.list();

我在这里找到了答案https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch17.html#querycriteria-collections

“对于查询基本值的集合,我们仍然针对集合创建 Criteria 对象,但要引用该值,我们使用特殊属性“元素”。对于索引集合,我们也可以使用特殊属性“索引”来引用索引属性。”

另外,在创建别名时,您需要指定 sql LEFT_JOIN(默认为 INNER_JOIN),否则您可能不会得到预期的结果。

【讨论】:

    猜你喜欢
    • 2011-12-02
    • 2011-06-17
    • 2016-12-20
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2011-06-08
    相关资源
    最近更新 更多