[SPRING] 스프링 데이터 JPA와 1 대 1 관계 유지
SPRING스프링 데이터 JPA와 1 대 1 관계 유지
나는 그들 사이에 OneToOne 관계를 가진 다음 두 엔티티를 가진다.
@Entity
@Table(name = "tasks")
public class Task {
@OneToOne(mappedBy = "task", cascade = CascadeType.PERSIST)
private Tracker tracker;
/* More code */
}
@Entity
@Table(name = "trackers")
public class Tracker {
@OneToOne
@JoinColumn(name = "trk_task", unique = true)
private Task task;
/* More code */
}
이 코드를 실행하려고합니다.
Task task = taskService.findDispatchableTask();
if (task != null) {
Tracker tracker = trackerService.findIdleTracker();
if (tracker != null) {
task.setTracker(tracker);
task.setStatus(TaskStatus.DISPATCHED);
taskService.save(task);
}
}
하지만이 오류가 발생합니다.
ERROR org.hibernate.AssertionFailure - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: non-transient entity has a null id
나는 "내 코드를 변경하는"그것을 해결할 수 있습니다 :
Task task = taskService.findDispatchableTask();
if (task != null) {
Tracker tracker = trackerService.findIdleTracker();
if (tracker != null) {
tracker.setTask(task);
trackerService.save(tracker);
task.setTracker(tracker);
task.setStatus(TaskStatus.DISPATCHED);
taskService.save(task);
}
}
내 질문은 OneToOne 관계를 유지하는 적절한 방법은 무엇입니까? 내 코드에서 왜 관계의 두 부분을 모두 저장하여 작동하게합니까?
해결법
-
==============================
1.여기 우리는 다시 간다.
여기 우리는 다시 간다.
모든 양방향 연관에는 소유자 측과 반대 측의 두면이 있습니다. 반대면은 mappedBy 속성을 가진 것이다. 소유자 쪽이 다른 쪽입니다. JPA / Hibernate는 오너 측에만 관심이있다. 따라서 역변환을 방금 초기화하면 연결이 유지되지 않습니다.
일반적으로 협회의 양면을 초기화하는 것이 좋습니다. 첫 번째는 소유자 측이 초기화되었는지 확인하기 때문이며 둘째 엔티티 그래프를 일관되게 만들기 때문에 자신의 이익을 위해 두 번째입니다.
또한 트랜잭션 내부에서 작업하는 경우 쿼리에 의해 반환 된 모든 엔터티는 연결된 엔터티입니다. 엔터티에 적용된 변경 사항은 트랜잭션이 커밋 될 때 (또는 이전에) 자동으로 지속됩니다. 자신이하는 것처럼 명시 적으로 엔티티를 저장할 필요가 없습니다.
from https://stackoverflow.com/questions/16380008/persist-onetoone-relation-with-springdata-jpa by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 사용자 정의 구분 기호를 사용하여 봄 부팅으로 DDL 생성 (0) | 2019.03.22 |
---|---|
[SPRING] json 응답에서 필드를 동적으로 제거하는 방법은 무엇입니까? (0) | 2019.03.22 |
[SPRING] 모든 데이터베이스 쿼리에 대한 전역 최대 절전 모드 필터 (0) | 2019.03.22 |
[SPRING] 콩 생성에있어서 봄 - 이상한 오류 (0) | 2019.03.22 |
[SPRING] Spring Expression Language - Java 8 for each 또는 목록의 스트림 (0) | 2019.03.22 |