Я пытаюсь сопоставить следующий случай в JPA с аннотациями:
Модель БД
Итак, у нас есть объект root который имеет отношение к источнику , который мы собираемся сохранить в нашей транзакции, но после обработки этого корневого объекта мы получим результат объект
Вот мое отображение:
public class Root {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="source_id", unique= false, nullable=false, insertable=true, updatable=false)
private Source source;
@Column(name = "label", nullable = true, insertable = true, updatable = false)
private String label;
}
public class Source {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "label", nullable = true, insertable = true, updatable = false)
private String label;
}
public class Result {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(cascade = CascadeType.MERGE)
@JoinColumn(name="source_id", unique= false, nullable=false, insertable=true, updatable=false)
private Source source;
@Column(name = "label", nullable = true, insertable = true, updatable = false)
private String label;
}
Мой UseCase:
Я сохраняю объект Source & Root MYSQL:
INSERT INTO source (label) VALUES ("FIRST"); -- id: 1
INSERT INTO root (source_id, label) VALUES (1, "MY FIRST");
Итак, обработка, яхочу сохранить объект Result, чтобы связать это значение с исходным объектом, но я хочу связать только для SELECT (а не для INSERT / UPDATE / REMOVE)
Мой код с lombok:
SourceEntity source = SourceEntity.builder().id(root.getId()).build();
ResultEntity result = ResultEntity.builder().source(source).label("REFERENCE TO FIRST").build();
dao.save(result);
Ошибка:
Cannot add or update a child row: a foreign key constraint fails (`mydb`.`result`, CONSTRAINT `result_fk0` FOREIGN KEY (`source_id`) REFERENCES `source` (`id`))
Я понимаю, что в отображении я делаю что-то не так, но не могу найти ошибку, может быть, cascadeType?Я тоже пытался CascadeType.DETACH
.
Спасибо,