Я создал дочернюю сущность:
public class ChildEntity {
private Long bookNo;
private String bookType;
}
Эти два поля вместе уникальны. Какие-то данные:
| No | Type |
|----|-----------|
| 1 | Classical |
| 2 | Classical |
| 2 | Scifi |
| 3 | Scifi |
| 1 | Classical | (Error for uniqueness
Я создал эту сущность для поиска внутри родительской сущности.
public class ParentEntity{
@ManyToOne
private ChildEntity child;
//and other fields here
}
Кроме того, есть 2 разных родительских объекта. Они должны быть разными объектами, у них есть несколько разных полей. Но эта дочерняя сущность является общей. Итак, я буду использовать эти дочерние объекты для сравнения/различия между таблицами данных, потому что в этих дочерних объектах есть только уникальные области. Я могу получить разницу в таблицах данных через эти дочерние поля сущности.
Я создал ManyToOne, потому что у разных родителей может быть один и тот же ребенок.
Я создаю родительские объекты в сервисе следующим образом:
private createParentEntity(Dto dto){
ParentEntity parent = new ParentEntity();
//set other fields from dto
parent.setAge(dto.getAge);
ChildEntity child = new ChildEntity();
child.setBookNo(dto.getBookNo());
child.setBookType(dto.getBookType());
parent.setChild(child);//here is problem , please look down
}
В чем моя проблема, строку я поставил комментарий.
Могут появиться одни и те же дочерние объекты, поэтому, когда я сохраняю родителей, он попытается снова сохранить дочерний элемент и может получить уникальную ошибку ограничения? Что я могу сделать для этого?
Потому что, в конце концов, я буду использовать данные Spring для поиска внутри родительского репозитория:
parentEntityRepository.findByChild(ChildEntity child);
@UniqueConstraints = {
@UniqueConstraint(
name = "uq_general_checklist_ordinal",
columnNames = {"book_no", "book_type"}
)
}
public class ChildEntity {
@Id
private Long bookNo;
@Id
private String bookType;
}
Это хорошее решение для размещения обоих идентификаторов? Или здесь я должен сначала сохранить ребенка и проверить, существует он или нет?
ChildEntity child =childRepository.findByBookNoAndBookType(
dto.getBookNo(),
dto.getBookType()
);//if exists, set to parent. if not, create new and set it?