Как определить отношения JPA с тем же объектом настройки, отсоединенным в JAVA 8 - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь сопоставить следующий случай в 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.

Спасибо,

...