2014-09-24 58 views
0

我是新手在Hibernate中尤其是在標準的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 
} 

我需要限制的如果某些值(字符串代碼)存在於recipientCodes集合中,將滿足條件。

+0

我已閱讀此文檔https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/criterion/Restrictions.html我沒有看到有用的限制 – 2014-09-24 14:36:17

+1

https:// docs .jboss.org/hibernate/orm/3.3/reference/zh-CN/html/querycriteria.html請閱讀文檔而不是api – Zeus 2014-09-24 14:39:45

+0

我知道如何使用簡單的Criteria查詢。我幾個月前已經閱讀過這個鏈接(你的鏈接)。此外,如果不是基本對象(字符串)是一些模型(例如員工),那麼我知道如何創建查詢,將對某些Employee字段應用限制,例如... – 2014-09-24 14:50:55

回答

0

我解決了我的任務!下面是部分滿的條件查詢在那裏我有一個問題:這裏

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

「對於queryng基本值的集合,我們仍然創造了條件對象反對收集,但爲了引用該值,我們使用特殊屬性「elements」。對於索引集合,我們也可以使用特殊屬性「indices」引用index屬性。

另外,在創建別名時,您需要指定sql LEFT_JOIN(默認值爲INNER_JOIN),否則可能無法獲得預期的結果。