반응형
1:N 단방향 맵핑을 알아보자.
테스트용 객체 Team (1) : Member (N) 을 아래와 같이 구성한다.
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "TEAM")
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "team_id")
private Long id;
private String name;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "team_id")
private List<Member> members;
}
~중략
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "member_id")
private Long id;
private Long team_id;
private String name;
}
1:N 구성이므로 Member에서 team_id를 참조해야한다.
그리고 테스트는 아래와 같이 진행했다.
@ExtendWith(SpringExtension.class)
@SpringBootTest
@Transactional
public class N1ProblemTest {
@Autowired
TeamRepository rpTeam;
@Autowired
MemberRepository rpMember;
@Autowired EntityManager entityManager;
@Test
public void test__() {
System.out.println("영속성 전이를 통한 insert start");
Member member1 = Member.builder().name("name of member1").build();
Member member2 = Member.builder().name("name of member2").build();
rpMember.saveAll(Arrays.asList(member1, member2));
Team team = Team.builder().name("name of team")
.members(Arrays.asList(member1, member2))
.build();
rpTeam.save(team);
entityManager.flush();
System.out.println("영속성 전이를 통한 insert end");
~중략
결과
insert member 후에 insert team 까지는 정상적으로 이루어 졌는데 추가적으로 member에 대한 update가 2회 발생했다.
해당 현상에 대해 더 자세한 설명은 여기 를 참고 바란다.
* 대부분의 맵핑의 경우 단방향 으로 충분하지만 "영속성 전이"를 통한 insert 시 양방향 맵핑이 더 좋다! 라고합니다.
위 NHN 동영상에서 많은 내용 도움 받았습니다.
반응형
'개발 > JAVA' 카테고리의 다른 글
JPA N:1 단방향 맵핑 (0) | 2022.10.26 |
---|---|
JPA 1:N 양방향 맵핑 (0) | 2022.10.26 |
Tomcat 에 사설 SSL 적용하기 (https 적용) (2) | 2018.02.13 |
java에서 JNI 를 이용하여 c 라이브러리(.so,.dll) 사용하기 (3) | 2017.10.15 |
FileLock FileChannel 공부 (0) | 2017.09.30 |
댓글