Hibernate генерирует неверный SQL при использовании JoinColumn на первичных ключах - PullRequest
0 голосов
/ 04 октября 2019

Имеются такие таблицы:

create table A (
    ID                uuid         not null,
    primary key (ID)
);

create table B (
    ID                uuid          not null,
    ANOTHER_ID        varchar(100)  not null,
    primary key (ID)
);

create table Ids (
    ID                uuid          not null,
    ANOTHER_ID        varchar(100)  not null,
    primary key (ID)
);

У меня есть сущности A, B и Ids.

public class Ids {
  @Id
  @Column(name = "ID")
  private UUID id; // this is id of A

  @Column(name = "ANOTHER_ID", unique = true)
  private String anotherId;
}

public class A {
  @Id
  @Column(name = "ID", length = 60)
  private UUID id;

  @OneToOne
  @JoinColumn(name = "ID", nullable = false)
  private Ids ids;
}

public class B {
  @Id
  @Column(name = "ID", length = 60)
  private UUID id;

  @ManyToOne
  @JoinColumn(name = "ANOTHER_ID", referencedColumnName = "ANOTHER_ID", nullable = false)
  private Ids ids;
}

, вызывающие метод findMyStuff () из такого хранилища:

public interface BRepository extends JpaRepository<B, UUID> {
    @Query("select a.id, b.id "
            + "from B b "
            + "join A a on a.ids.id = b.ids.id ")
    List<Object[]> findMyStuff();
}

генерирует недопустимый SQL, например:

select b0_.ID as col_0_0_, a1_.ID as col_1_0_
from B b0_
inner join IDS ids3_ on b0_.ANOTHER_ID=ids3_.ANOTHER_ID
inner join A a1_ on (ids2_.ID=ids3_.ID) 

, поэтому происходит сбой с: PSQLException: ERROR: missing FROM-clause entry for table "ids2_"

, почему в этом случае hibernate генерирует недопустимый SQL? Я использую hibernate 5.4.3.Final.

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