我有几个实体:
TranslationUnit
TranslationValue
区域设置
TranslationUnit与TranslationValue的关系为ManyToMany。
TranslationValue的区域设置为1-1。
语言环境具有有意义的字段-jhi_value;
我需要做的是:选择那些TranslationUnits,即:
1)没有相关的TranslationValues(这意味着-完全没有翻译) 2)没有带有特定语言环境(例如“ en”)的TranslationValues。
我已经为此建立了SQL查询,可以在我的Postgres DB中完美运行:
select * from translation_unit tu where not exists ( select null from translation_value tv join locale l on tv.locale_id =l.id where l.jhi_value='en' and tu.id=tv.translation_unit_id);
我需要为此建立规范(它将与其他现有规范结合在一起)。
感谢任何帮助。
答案 0 :(得分:0)
找到解决方案:
Subquery<TranslationValue> subquery = q.subquery(TranslationValue.class);
Root<TranslationValue> from = subquery.from(TranslationValue.class);
subquery.distinct(true).
select(from).where(cb.and(
cb.equal(from.get(TranslationValue_.LOCALE).get(Locale_.VALUE), filterRequest.getLanguageCode())),
cb.equal(r.get(TranslationUnit_.ID), from.get(TranslationValue_.TRANSLATION_UNIT))