Отображения Hibernate: Эффективность / производительность с 3 отображениями @OneToOne, где два будут нулевыми - PullRequest
0 голосов
/ 27 мая 2019

Мне интересно, как Hibernate выполняет запросы с моей текущей настройкой отображения.

Код будет ниже. Класс ConnectionManager является родительским объектом, и нам никогда не нужно обращаться к его дочерним элементам отдельно от родительского (т. Е. Мы просто получаем и сохраняем, используя родительский объект).

В ConnectionManager есть @OneToOne для emailDetail, documentDetail и sqlDetail. Только один из них будет заполнен, остальные два будут нулевыми. Каждая деталь «x» также имеет сопоставление коллекции «один ко многим» для проверки «x».

Будет ли каждый "findOne (id идентификатора соединения)" или "findAll ()" искать все таблицы emailDetail, documentDetail и SqlDetail для каждого запроса? Похоже, что если это так, то это будет очень неэффективный запрос, так как два всегда будут нулевыми. Есть ли лучший способ, которым я мог бы настроить это?

@Entity
public class ConnectionManager {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private Long controlId;

private int sequence;




public enum ValidationType {Email, Document, Sql};
@Enumerated(EnumType.STRING)
private ValidationType type;


@OneToOne(cascade = {CascadeType.ALL},orphanRemoval = true)
@JoinColumn(name = "emailDetail_id")
private EmailDetail emailDetail;

@OneToOne(cascade = {CascadeType.ALL}, orphanRemoval = true)
@JoinColumn(name = "documentDetail_id")
private DocumentDetail documentDetail;

@OneToOne(cascade = {CascadeType.ALL},orphanRemoval = true)
@JoinColumn(name = "sqlDetail_id")
private SqlDetail sqlDetail;
//getters setters

DocumentDetail

    @Entity
  public class DocumentDetail {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;


@OneToMany( cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "documentDetail_id")
private List<DocumentValidation> documentValidationList;

private String location;

public DocumentDetail(){};

DocumentValidation

@Entity
public class DocumentValidation {


@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;


private String details;

Отношения для остальных (EmailDetail-> EmailValidation, SqlDetail-> SqlValidaton) в значительной степени идентичны, это поля, которые различны в каждом классе

...