Hibernate слишком много sql InheritanceType.JOINED - PullRequest
0 голосов
/ 29 марта 2020

У меня есть следующий родительский объект:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(of = "id")
public class User {
    @Id
    private String id;

    @NotBlank
    private String name;
}

У меня есть следующий подкласс:

@Entity
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@ToString(of = {"id"})
@PrimaryKeyJoinColumn(name="id")
public class SubUser extends User {

    @NotNull
    private Long consume;
}

Я выполняю следующий запрос:

    var hql = SELECT new com.mypackage.MyResult(su) From SubUser su

em.createQuery(hql).getResultList();

Класс MyResult:

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of="subUser")
@ToString(of={"subUser"})
public class MyResult {

    private SubUser subUser;
}

Проблема в следующем: Hibernate всегда выполняет SELECT для каждой найденной строки. Это делает выбор, чтобы найти пользователя. В этом случае, если имеется 50 результатов, выполняется 50 SELECT.

Я бы хотел, чтобы это СОЕДИНЕНИЕ между пользователем и SubUser, только один раз, вместе с основным запросом.

* Я знаю, что я может отображаться непосредственно в SubUser, вместо «MyResult», это потому, что я буду использовать больше полей после решения этой проблемы, например,

private SubUser su;
private OtherObject other;

Версии:

Spring boot 2.2.5 .RELEASE Hibernate-core: 5.4.2.Final

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