Hibernate标准在属性

时间:2017-03-26 20:30:10

标签: java sql hibernate

我有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获取主要语言几天,甚至可以通过hibernate中的属性进行过滤? 我想要的就是这个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',我甚至无法在没有描述这一切的情况下形成我的问题,所以我的谷歌尝试失败了,有人可以帮忙吗? 如何通过siteId和网站的primeLocale获取语言?

2 个答案:

答案 0 :(得分:2)

您应该使用别名和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();
}

答案 1 :(得分:-1)

您可以使用alias

{{1}}