일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 무상태프로토콜
- Transaction not successfully started
- SpringBoot
- 김영한JPA
- hibernate.dialect
- 네이버 연결된 서비스
- JPA
- Invalid bound statement (not found)
- initialDelay
- @Entity
- 매핑정보가없는필드
- @Table
- HTTPMESSAGE
- Git
- 자바ORM표준프로그래밍
- KAKAOLOGINAPI
- gitrevert
- 멱등활용
- HTTP3
- anyMatch
- http
- gitreset
- 데이터베이스 방언
- 캐쉬가능
- fixedDelay
- DB방언
- RFC723x
- ERROR TYPE : org.apache.ibatis.binding.BindingException
- 네이버로그인API
- org.apache.ibatis.binding.BindingException
- Today
- Total
목록IT (131)
twocowsong
양방향 연관관계를 설정하고 가장 흔히 하는 실수는 연관관계의 주인에는 값을 입력하지않고, 주인이 아닌곳에만 값을 입력하는것입니다. DB에 외래 키 값이 정상적으로 저장되지 않으면 이것부터 의심해봐야합니다. public void testSaveNonOwner(EntityManager em) { // 회원1 저장 Member member1 = new Member("member1", "회원1"); em.persist(member1); // 회원2 저장 Member member2 = new Member("member2", "회원2"); em.persist(member2); // 팀1 저장 Team team1 = new Team("team1", "팀1"); em.persist(team1); // 주인이 아닌 곳만..
양방향 연관관계를 사용해서 팀1, 회원1, 회원2를 저장해보겠습니다. public static void testSave(EntityManager em) { // 팀1 객체 생성 Team team = new Team("team1", "팀1"); // 팀1 저장 em.persist(team); // 회원1, 회원2 객체 생성 Member member1 = new Member("member1", "회원1", team); Member member2 = new Member("member2", "회원2", team); // 회원1, 회원2 저장 em.persist(member1); em.persist(member2); } 팀1을 저장 후 member엔티티를 생성시에 team의 연관관계를 설정하고 저장하였습니다. 위..
엄밀히 이야기하면 객체에는 양방향 연관관계라는것이 없습니다. 서로다른 단방향 연관관계 2개를 애플리케이션 로직으로 잘 묶어서 양방향인 것처럼 보이게 할 뿐입니다. 반면에 DB테이블은 외래키 하나로 양쪽이 서로 조인을 할 수 있습니다. 객체 연관관계는 다음과 같습니다. -회원 : 팀 연관관계 1개 (단방향) -팀 : 회원 연관관계 1개 (단방향) 테이블 연관관계는 다음과 같습니다. - 회원 팀의 연관관계 1개 (양방향) 테이블은 외래 키 하나로 두 테이블의 연관관계를 관리합니다.엔티티를 단방향으로 매핑하면 참조를 하나만 사용하므로 이 참조로 외래키를 관리하면 됩니다.그런데 양방향으로 매핑하면 회원 -> 팀 , 팀 -> 회원 두곳에서 서로를 참조하게됩니다. 따라서 객체의 관리하는 포인트는 2곳으..
이제 양방향 관계를 매핑해보겠습니다. @Getter @Setter @Entity @AllArgsConstructor @NoArgsConstructor @Table(name = "MEMBER") public class Member { @Id @Column(name="MEMBER_ID") private String id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; // 연관관계 설정 public void setTeam(Team team) { this.team = team; } // Getter, Setter... } 회원 엔티티에는 변경된 부분은 없습니다. @Entity @Setter @Getter ..
지금까지 회원에서 팀으로만 접근하는 N : 1 단방향 매핑으로 알아보았습니다. 이번에는 반대 방향인 팀에서 회원으로 접근하는 관계를 추가하겠습니다. 회원에서 팀으로 접근하고 반대 방향인 팀에서 회원으로 접근할 수 있도록 양방향 연관관계로 매핑해보겠습니다. 그림과 같이 회원과 팀은 N : 1 관계입니다. 반대로 팀에서 회원은 1 : N 관계입니다. 1 : N 관계는 여러 건과 연관관계를 맺을 수 있으므로 컬렉션을 사용해야 합니다. Team.members를 List컬렉션으로 추가했습니다. 회원 -> 팀 (Member.team) 팀 -> 회원 (Team.members) JPA는 List를 포함해서 Collecatino, set, Map같은 다양한 컬렉션을 지원합니다. DB테이블은 외래키 하나로 양방향으로 조회..
연관된 엔티티를 삭제하려면 기존에 있던 연관관계를 먼저 제거하고 삭제해야합니다. 그렇지않으면 외래 키 제약조건으로 이해 DB오류가 발생합니다. 팀1 에는 회원 1과 회원2가 소속되어있습니다. 이때 팀1을 삭제하려면 연관관계를 먼저 끊어야합니다. Team team = em.find(Team.class, "team1"); Member member1 = em.find(Member.class, "member1"); Member member2 = em.find(Member.class, "member2"); member1.setTeam(null); member2.setTeam(null); em.remove(team);
이번에는 연관관계를 제거하겠습니다. 회원1을 팀에 소속하지 않도록 변경하겠습니다. public static void deleteRelation(EntityManager em) { Member member1 = em.find(Member.class, "member1"); member1.setTeam(null); } 연관관계를 null로 설정하였습니다. 일때 실행되는 연관관계 제거 SQL은 아래와같습니다. UPDATE MEMBER SET TEAM_ID = null WHERE MEMBER_ID = 'member1'
이번에는 연관관계를 어떻게 수정하는지 확인해보겠습니다. 팀1 소속이던 회원을 새로운 팀2에 소속하도록 수정하겠습니다. public static void updateRelation(EntityManager em) { // 새로운 팀2 - INSERT Team team2 = new Team("team2", "팀2"); em.persist(team2); // 회원1에 새로운 팀2를 설정 Member member1 = em.find(Member.class, "member1"); member1.setTeam(team2); } 실행되는 수정 SQL은 아래와 같습니다. INSERT INTO TEAM(TEAM_ID, NAME) VALUES ('team2', '팀2'); UPDATE MEMBER SET TEAM_ID =..