簡體   English   中英

休眠標准在屬性上相等

[英]Hibernate criteria equal on property

我有一種Language:

class Language {
    private Site site;
    private Locale locale;
    //other usual stuff
}

我有一個Site

class Site {
    private Long id;
    private Set<Language> languages;
    private Locale primeLocale;
    //usual stuff
}

而且我一直在努力地通過站點的ID獲取主要語言,甚至可以通過休眠中的屬性進行過濾嗎? 我想要的等效於此sql:

select *
from languages as l
join sites as s on l.locale = s.primeLocale
where l.siteId = (some id)

我嘗試了以下操作:

public Language getPrimeLanguageBySite(Long siteId) {
        Criteria criteria = session.createCriteria(Language.class).add(Restrictions.eq("site.id", siteId))
                .add(Restrictions.eq("site.primeLocale", Property.forName("locale")));
        return (Language)criteria.setMaxResults(1).uniqueResult();
    }

但是它失敗,並unknown column 'site.primeLocale' in 'where clause'帶有unknown column 'site.primeLocale' in 'where clause' ,並且我什至無法描述所有問題而無法提出問題,因此我在google上的嘗試失敗了,有人可以幫忙嗎? 如何通過siteId和網站的primeLocale獲取語言?

您應該使用別名和eqProperty。

public Language getPrimeLanguageBySite(Long siteId) {    
  Criteria c = session.createCriteria(Language.class, "language");   
  c.createAlias("language.site", "site");
  c.add(Restrictions.eqProperty("site.primeLocale", "language.locale"));
  c.add(Restrictions.eq("site.id", siteId));
  return c.setMaxResults(1).uniqueResult();
}

您可以使用別名

public Language getPrimeLanguageBySite(Long siteId) {    
  Criteria c = session.createCriteria(Language.class, "language");   
  c.createAlias("language.site", "site");
  c.add(Restrictions.eq("site.primeLocale", "language.locale"));
  c.add(Restrictions.eq("site.id", siteId));
  return c.setMaxResults(1).uniqueResult();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM