Оставлено Внешнее Соединение в Критериях Api - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь получить следующий запрос, используя Criteria API:

select lang.* from LKUP_LANG lang LEFT OUTER JOIN LANG_SEQUENCES seq ON
lang.SHORT_NAME=seq.LANG_CODE and (lang.DISPLAY_NAME is not null)
order by nvl(seq.SEQ_LANG_CODE, 2147483647) asc;

Я сделал:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Lang> criteriaQuery = builder.createQuery(Lang.class);
Root<Lang> languageRoot = criteriaQuery.from(Lang.class);

List<Predicate> predicates = new ArrayList<>();
// added some predicates
criteriaQuery.orderBy(...);

Попытка добавления

Join<Lang, LANG_SEQUENCES> join = languageRoot.join("languageSequences",JoinType.LEFT);

Сущность выглядит как

LanguageSequences
@Id
@Column(name = "LANG_CODE")
private String langCode;

@Column(name = "SEQ_LANG_CODE")
private int seqLangcode;

@OneToOne
@Fetch(FetchMode.JOIN)
@JoinColumn(name = "LANG_CODE", referencedColumnName = "SHORT_NAME")
private Lang lang;

и

Lang
@Column(name = "DISPLAY_NAME", unique = true)
private String displayName;

@Id
@Column(name = "SHORT_NAME")
private String shortName;

@OneToOne(cascade = CascadeType.ALL, mappedBy = "lkupLanguage")
private LanguageSequences languageSequences;

Попытка использовать соединения по-разному, но похоже, что я что-то упустил.Я получаю заказ, все предикаты верны.Я использую JPA 2.1 и Oracle.

1 Ответ

0 голосов
/ 04 июля 2019

В JPA вы не можете выбрать последовательность, вы должны использовать нативные запросы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...