У меня есть две сущности, Тема и Урок . Субъект связан с OneToMany с Уроком.
В моей базе данных уже есть 2 набора объектов:
{
"id": 1,
"name": "wow",
"lessons": [
{
"id": 2,
"difficulty": "hard"
}
]
}
и
{
"id": 3,
"name": "wow2",
"lessons": [
{
"id": 4,
"difficulty": "hardy"
}
]
}
Сущности определяются следующим образом
@Entity
public class Lesson {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String difficulty;
@ManyToOne(targetEntity = Subject.class)
private Subject subject;
}
@Entity
public class Subject {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
@OneToMany(orphanRemoval=false, cascade= CascadeType.ALL)
@JoinColumn(name = "subject_id")
private List<Lesson> lessons;
}
Я хочу помешать успешному сохранению этого объекта, так как он воровал (1, урок "вау"):
{
"id": 3,
"name": "wow2",
"lessons": [
{
"id": 2,
"difficulty": "hard_overrriden"
}
]
}
Вручную повторять все уроки - очевидный путь, но я хочу простое решение.
РЕДАКТИРОВАТЬ :
Мое решение решает проблему кражи, но создает и другую
@ManyToOne
@JoinColumn(updatable = false)
private Subject subject;
.
.
.
@OneToMany(cascade= CascadeType.ALL, mappedBy="subject", orphanRemoval=true)
private List<Lesson> lessons;
Это решает проблему кражи, но удаляет сироту, если я хочу отсоединить урок от субъекта .
При удалении orphanRemoval = true
просто прекращает отсоединение урока от субъекта .
Диссоциация объекта выглядит следующим образом:
{
"id": 1,
"name": "wow",
"lessons": []
}