Specifications Spring数据规范:关系中的notEquals()
我有几个实体: 翻译单位Specifications Spring数据规范:关系中的notEquals(),specifications,jpa-criteria,Specifications,Jpa Criteria,我有几个实体: 翻译单位 TranslationValue 地点 TranslationUnit与TranslationValue有许多关系。 TranslationValue的区域设置为1-1。 区域设置具有有意义的字段-jhi_值 我需要做的是:选择那些TranslationUnits,即: 1) 没有相关的TranslationValue(这意味着-根本没有翻译) 2) 没有具有特定区域设置的TranslationValue(例如,“en”) 我已经为此构建了SQL查询,在我的Postgr
TranslationValue
地点 TranslationUnit与TranslationValue有许多关系。
TranslationValue的区域设置为1-1。
区域设置具有有意义的字段-jhi_值
我需要做的是:选择那些TranslationUnits,即: 1) 没有相关的TranslationValue(这意味着-根本没有翻译) 2) 没有具有特定区域设置的TranslationValue(例如,“en”) 我已经为此构建了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);
我需要为此建立规范(它将与其他现有规范相结合)
感谢您的帮助。找到了解决方案:
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))
Subquery Subquery=q.Subquery(TranslationValue.class);
Root-from=subquery.from(TranslationValue.class);
subquery.distinct(true)。
选择(从)。其中(cb和(
cb.equal(from.get(TranslationValue\uu0.LOCALE).get(LOCALE\u0.VALUE),filterRequest.getLanguageCode()),
cb.equal(r.get(TranslationUnit_uu.ID),from.get(TranslationValue_u.TRANSLATION_u.UNIT))