Spring Data JPA, сгенерированный SQL индивидуальных методов запроса ссылок, изменился - PullRequest
0 голосов
/ 12 ноября 2018

Технология:

  • Spring-Boot
  • Maven
  • JPA

У меня есть объект, который содержит однонаправленную самореференцию:

@Entity
public class Example {

  @Id
  @GeneratedValue
  Long id;

  @Setter
  String title;

  ...

  @OneToOne
  Example earlierVersion;

  @Setter
  @OneToOne(mappedBy = "earlierVersion")
  Example laterVersion;

}

Меня интересуют последние версии примеров. Поэтому я запрашиваю через Spring JPA методы запроса:

List<Example> findByLaterVersionIsNull();

Это хорошо работает с версией Spring Boot 1.5.2.REALEASE (maven).

Но после изменения в Spring Boot версии 2.0.0 или выше кажется, что генерируемый SQL, который выполняется, больше не содержит необходимых LEFT OUTER JOIN.

например:.

Версия 1.5.2. RELEASE

select ...
from example example0_
left outer join example example1_ on example0_.id=example1_.earlier_version_id
where (example1_.id is null) ?

После версии 2.0.0.RELEASE

select ... 
from combination combinatio0_ 
where (combinatio0_.id is null)

Конечно, более поздний запрос вообще не имеет смысла, поскольку id является первичным ключом.

Так что я почти уверен, что сделал что-то не так или просто не понял, что что-то важное изменилось. Но после долгих исследований это будет мой первый пост в этом замечательном сообществе, чтобы получить поддержку.

Заранее спасибо!

1 Ответ

0 голосов
/ 12 ноября 2018

Это похоже на https://jira.spring.io/browse/DATAJPA-1418

, который был исправлен и перенесен в следующие выпуски Spring Data JPA:

  • 2.2 M1 (Moore)
  • 2.1.2 (Lovelace SR2)
  • 2.0.12 (Kay SR12)

Если вы используете загрузочную версию, которая использует один из этих выпусков или более позднюю версию Service Release, проблема должна исчезнуть.

Вы также можете явно указать такую ​​версию JPA для использования.

...