Предположим, у нас есть сложное отношение JPA, часть которого выглядит следующим образом:
@MappedSuperclass
public class DiffEntity {
private String diffId;
public DiffEntity() {
this.diffId = UUID.randomUUID().toString();
}
//...
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class ParentEntity extends DiffEntity {
@Id
@GeneratedValue
private long id;
@Column
private String name;
//...
}
@Entity
public class Construct extends ParentEntity {
@Column
private String variable;
@OneToMany(mappedBy = "construct", cascade = CascadeType.ALL)
private List<Partconstruct> partconstructs;
//...
}
@Entity
public class Partconstruct extends ParentEntity {
@OneToMany(mappedBy = "partconstruct", cascade = CascadeType.ALL)
private List<Field> fields;
@OneToMany(mappedBy = "partconstruct", cascade = CascadeType.ALL)
private List<Hardparameter> hardparameters;
@ManyToOne
@JoinColumn(name = "construct_id")
private Construct construct;
//...
}
@Entity
public class Field extends ParentEntity {
@Column
private int fieldSize;
@ManyToOne
@JoinColumn(name = "partconstruct_id")
private Partconstruct partconstruct;
//...
}
@Entity
public class Hardparameter extends ParentEntity {
@Column
private String value;
@ManyToOne
@JoinColumn(name = "partConstruct_Id")
private Partconstruct partConstruct;
//...
}
Мы имеем дело с объектами типа Construct
.Construct
глубоко клонируется и сохраняется, все его вложенные объекты на графе объектов также клонируются и получают новый Id
(первичный ключ).На каждом клоне diffId
(из DiffEntity
сущности) остается тем же самым (оно служит для корреляции объектов для отличительного признака).
Как можно было бы искать и получать ссылку дляспецифические DiffEntity
, учитывая, что у нас есть следующее:
- ссылка на
Construnct
экземпляр - тип вложенного объекта
diffId
мы после.
Я пробовал разные версии траверсов графов объектов с отражением, которые будут работать для небольшого по размеру Construct
объекта, но когда он станет слишком большим, производительность будет очень низкой.
Есть ли какая-то магия у самого менеджера сущностей для достижения этой цели?