Hibernate: Как выбрать, какая коллекция из нескольких будет загружена при загрузке родительского объекта - PullRequest
0 голосов
/ 03 октября 2019

У меня, по сути, есть объект ValidationStep, который имеет однозначное сопоставление для SqlDetail или DocumentDetail.

SqlDetail имеет один ко многим Список SqlValidations

DocumentDetail имеет один длямного Список DocumentValidations.

Есть ли способ в классе ValidationStep, чтобы сказать, что ValidationStep был выбран. Если тип == Sql, то получить SqlValidations сущности SqlDetail, аналогичный для Document

ValidationStep

@Entity
public class ValidationStep {

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



@ManyToOne
@JoinColumn(name= "automation_information_aId", referencedColumnName= "aId")
private AutomationInformation automationInformation;


private int sequence;

public enum ValidationType {
    Email, Document, Sql, Custom
};

@Enumerated(EnumType.STRING)
private ValidationType type;

@OneToOne(cascade = { CascadeType.ALL }, orphanRemoval = true,fetch=FetchType.EAGER)
private EmailDetail emailDetail;

@OneToOne(cascade = { CascadeType.ALL }, orphanRemoval = true,fetch=FetchType.EAGER)
private DocumentDetail documentDetail;

@OneToOne(cascade = { CascadeType.ALL }, orphanRemoval = true,fetch=FetchType.EAGER)
private SqlDetail sqlDetail;

private String description;

DocumentDetail

@Entity
public class DocumentDetail {

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


//no cascade, a connectionManager save/update cant save/update a  a credential
//unidirectional mapping,
@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name= "credential_id")
private Credential credential;

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

public enum DocumentLocationType {
    Confluence, DocumentCentral, FileShare, OneDrive, SharePoint
};

@Enumerated(EnumType.STRING)
private DocumentLocationType locationType;

private String locationUrl;

DocumentValidation

@Entity
public class DocumentValidation implements Comparable {

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

//type of validation
public enum DocumentValidationKey {
    NameContains, NameMatchesRegex, LastUpdated, DocumentContains, NameStartsWith, NameEndsWith, DocumentContentsMatchsRegex, NameExactly
}
@Enumerated(EnumType.STRING)
private DocumentValidationKey validationType;

//value which results in pass
private String validationValue;

SqlDetail в значительной степени идентичен DocumentDetail, а SqlValidation идентичен DocumentValidation

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