我有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获取语言?
答案 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}}