작성
·
401
0
@Entity
@Getter
@Setter
public class Board {
@Id
@GeneratedValue
private Long id;
private String title;
@OneToOne(mappedBy = "board")
private BoardDetail boardDetail;
}
@Entity @Getter @Setter
public class BoardDetail {
@Id
private Long boardId;
@MapsId // BoardDetail.boardId와 매핑
@OneToOne
@JoinColumn(name = "board_id")
public Board board;
private String content;
}
public class OneToOne {
private EntityManager em;
private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("non");
@BeforeEach
void setUp(){
em = emf.createEntityManager();
}
@AfterAll
static void finish(){
emf.close();
}
@DisplayName("1:1 식별 매핑일 경우 ")
@Test
void t1(){
EntityTransaction tx = em.getTransaction();
tx.begin();
Board board = new Board();
board.setTitle("T1 4번째 월즈 우승");
BoardDetail boardDetail = new BoardDetail();
boardDetail.setContent("상혁아 축하해");
boardDetail.setBoard(board);
em.persist(boardDetail);
tx.commit();
}
}
여기서 제가 부모 테이블인 board를 저장하지 않고 바로 boardDetail만 저장했습니다.
cascade옵션을 주지 않았는데도 부모 테이블에 갱신이 되더라구요
Hibernate:
call next value for hibernate_sequence
Hibernate:
/* insert non.Board
*/ insert
into
Board
(title, id)
values
(?, ?)
Hibernate:
/* insert non.BoardDetail
*/ insert
into
BoardDetail
(content, board_id)
values
(?, ?)
공식 문서에서도 Person 저장하고 PersonDetail을 저장하던데
이렇게 해도 동작하는 이유가 궁금합니다.
답변 1
0
안녕하세요. kamser님
도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.
실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요
추가로 다음 내용도 코멘트 부탁드립니다.
1. 문제 영역을 실행할 수 있는 방법
2. 문제가 어떻게 나타나는지에 대한 상세한 설명
감사합니다.
링크가 잘못 되었네요.
다음을 참고해주세요
https://bit.ly/3fX6ygx