본문 바로가기

개인적으로 공부한 것을 정리해 놓은 블로그입니다 틀린 것이 있으면 댓글 부탁 드립니다!


반응형

JPA

(55)
JPA 공부 12 - 값 타입 collection 사용 @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Entity public class Member { @Id @GeneratedValue private Long id; private String name; //기간 @Embedded private Period period; //주소 @Embedded private Address homeAddress; @Embedded @AttributeOverrides(value = { @AttributeOverride(name = "zipcode",column = @Column(name = "work_zipcode")), @AttributeOverride(name = "street",column = @Column(nam..
JPA 공부 11 - JPA 데이터 타입 분류 (임베디드 타입) 엔티티 타입 - @Entity로 정의하는 객체 - 데이터가 변해도 식벼자로 지속해서 추적 가능 - 예)회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 - int , integer String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가 - 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 된다. 1. 값 타입 - 자바 기본 타입(int ,double). - 래퍼 클래스 (Integer , Long) - String - 임베디드 타입(embedded type , 복합 값 타입) - 컬랙션 값 타입(collection value type) 임베디드 타입 - 새로운 값 타입을 직접 정의할 수 있다 . - JPA는 임베..
JPA 공부 10 - 영속성 전이 (cascade) cascade 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만들고 싶을 떄 사용한다 . 예 : 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장하게 한다. @Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent",cascade = CascadeType.ALL) private List childList = new ArrayList(); public void addChild(Child child){ childList.add(child)..
JPA 공부 9 - 즉시로딩과 지연로딩 지연 로딩 (Lazy loading) 연관된 내용을 프록시로 가져온다 . @Entity public class Member { @Id @GeneratedValue private Long id; private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team; } 연관된 필드의 연관관계 맵핑 옵션으로 fetch 타입을 지정할 수 있다. Lazy (지연로딩), Eagar(즉시로딩)이 있다. //팀 저장 Team team = new Team(); team.setName("team1"); em.persist(team); //멤버 저장 Member member = new Member(); me..
JPA 공부 8 - Proxy 일단 한가지 예시를 들어보려한다. Member 와 Team 엔티티가 있다 둘은 ManyToOne의 관계로 연관관계를 갖고있다. //Member를 가져옴 Member member = em.find(Member.class, 1L); //멤버만 필요한 경우 private static void printMember(Member member) { String name = member.getName(); System.out.println("memberName = " + name); } //멤버와 팀이 모두 필요한 경우 private static void printMemberAndTeam(Member member) { String name = member.getName(); System.out.println("mem..
JPA 공부 7 - 상속관계 매핑 객체에는 상속관계가 있지만 관계형 데이터베이스는 상속 관계가 없다 . 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사한 편이다. 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다 . DB의 super type sub type 논리 모델을 물리모델로 구현하는 방법은 3가지이다. 1. JOIN 전략 아이템 테이블과 ALBUM , MOVIE , BOOK 테이블을 각각 조인 하여 가져오는 전략이다 . 전략들 중 가장 정규화 되어 있고 JPA와 가장 유사한 모델이다. ALBUM 을 생성한다고 하면 공통 정보는 ITEM에 저장하고 ALBUM 정보는 ALBUM에 저장한다 . album , item 이 따로 2번의 insert 가 일어나고 조회시에는 ALBUM과 ITEM..
JPA 공부 6 - 다대다 연관관계(N:N) 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현 할 수 없다. 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어야 한다. 반면에 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계를 만들 수 있다. 객체를 @ManyToMany 로 맵핑하면 JPA는 이를 연결 테이블로 만들어 준다 이떄 주인이 되는 쪽에서 @JoinColumn이 아닌 @JoinTable(name="MEMBER_PRODUCT")를 사용해줘야 한다. name 옵션에는 중간 테이블 이름을 적어주면 그 이름으로 양쪽의 프라이머리키를 외래키로 갖는 연결테이블이 만들어진다. 하지만 이 방법에는 중간 테이블에 다른 정보를 넣을 수 없다는 한계가 있어 왠만하면 쓰지 않는다고 한다. 위의 문제를 해결하기 위해 중간테이블을 엔티티로 만들어서..
JPA 공부 5 - 일대일 연관관계(1:1) 일대일 연관관계 단방향(1:1) 일대일 관계는 그 반대에서도 일대일이다 . 주 테이블이나 대상 테이블 중에 외래 키 선택이 가능하고 외래 키에 데이터베이스 유니크 제약 조건을 추가하면 된다. 둘다 동등한 관계이기 떄문에 연관관계의 주인이 없다 어느 쪽에서 외래 키를 관리해도 상관이 없다 . @Data @NoArgsConstructor @AllArgsConstructor @Entity public class Locker { @Id @GeneratedValue private Long id; private String name; //양방향일 경우 추가 //@OneToOne(mappedBy = "locker") //private Member member; } @NoArgsConstructor @AllArgsCo..

반응형