전체 글196 [김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 8. 프록시 프록시와 연관관계 관리- 프록시 프록시 (요약) 1) 프록시에 대한 매커니즘은 뒤에 즉시로딩과 지연로딩의 원리를 설명한다. 2) org.hibernate.LazyInitializationException, could not initialize proxy 에러가 발생했을 때, JPA의 엔티티 객체 조회는 트랜잭션 커밋시점에 초기화되므로, 트랜잭션 종료 후 엔티티 getXXX 하게되면 위와같은 에러가 발생할 수 있으니 이 내용을 참고하자. 소스코드로 확인 ==> EntityManager에는 .find()와 .getReference() 메서드가 있다. .find(): 실제 DB에 접근해 가져오는 엔티 .getReference(): 하이버네이트가 강제로 만든 가짜 클래스(프록시 클래스)를 생성한다. ==> 사용.. 2023. 10. 31. [김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 7. @MappedSuperclass DB는 완전히 달라 따로 쓰는데 공통된 속성이 반복될 때, 객체 입장에서 속성만 상속받아서 쓰고 싶을때 @MappedSuperclass - @MappedSuperclass 예제1 ===> 속성을 같이 쓰고 싶을 때 사용한다. (상속클래스는 추상클래스 선언을 권장) - @MappedSuperclass 예제2 (DB컬럼명을 명시하고 싶을 때) ===> DB컬럼명은 디폴트로 엔티티의 변수명으로 생성되고 (name = "DB컬럼명")을 선언하면 DB컬럼명도 직접 명시해서 생성할 수 있다. 2023. 10. 26. [김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 7. @Inheritance, @DiscriminatorColumn, @DiscriminatorValue 고급매핑 - 상속관계 매핑 @Inheritance, @DiscriminatorColumn, @DiscriminatorValue • @Inheritance(strategy=InheritanceType.XXX) • JOINED: 조인 전략 => 각 테이블로 생성해 기본키로 연관관계 ==> 부모 객체의 id를 참조하는 각 테이블이 생성됨. (정석) • 장점 • 테이블 정규화 • 외래 키 참조 무결성 제약조건 활용가능 • 저장공간 효율화 • 단점 • 조회시 조인을 많이 사용, 성능 저하 • 조회 쿼리가 복잡함 • 데이터 저장시 INSERT SQL 2번 호출 • SINGLE_TABLE: 단일 테이블 전략 => 한 테이블에 컬럼을 몰아넣어 생성한다. • 장점 • 조인이 필요 없으므로 일반적으로 조회 성능이 빠름 •.. 2023. 10. 26. [김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 6. @ManyToOne, @OneToMany, @OneToOne, @ManyToMany 다대일 [N:1] (@ManyToOne) • 가장 많이 사용하는 연관관계 • 외래 키가 있는 쪽이 연관관계의 주인 • 다대일의 반대는 일대다 • 양쪽을 서로 참조하도록 개발 일대다 [1:N] (@OneToMany) • 일대다 단방향은 일대다(1:N)에서 일(1)이 연관관계의 주인 • 테이블 일대다 관계는 항상 다(N) 쪽에 외래 키가 있음 • 객체와 테이블의 차이 때문에 반대편 테이블의 외래 키를 관리하는 특이한 구조 • @JoinColumn을 꼭 사용해야 함. 그렇지 않으면 조인 테이블 방식을 사용함(중간에 테이블을 하나 추가함) - 일대다 단방향 매핑의 단점 • 엔티티가 관리하는 외래 키가 다른 테이블에 있음 • 연관관계 관리를 위해 추가로 UPDATE SQL 실행 • 일대다 단방향 매핑보다는 다대일.. 2023. 10. 17. [김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 5. 연관관계 매핑 기초 - 양방향 연관관계와 연관관계의 주인 양방향 매핑 엔티티 정의@ManyToOne @OneToMany @OneToMany @ManyToOne @OneToOne @OneToOne @ManyToMany @ManyToMany ===> 양방향 관계라는 표현은 이해하기 쉽게 표현한 것이다. 실제로는 단방향 관계 2개를 선언한 것. 연관관계의 주인==> DB의 외래키(FK:FOREIGN KEY) 기준으로 주인을 정한다. 주인: @XXXXXXXX @JoinColumn(name = 'DB 컬럼명') 종속: @XXXXXXXX(mappedBy == '주인 엔티티에 선언된 종속 필드명') (추가설명내용) TEAM을 주인으로 설정하는 것도 가능하지만 성능 이슈가 있어 사용하지 말라 설명합니다. 1) MEMBER 엔티티를 주인으로 했을때 -> MEMBER 테이블에는.. 2023. 10. 17. [김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 5. 연관관계 매핑 기초 - 단방향 연관관계 연관관계가 필요한 이유와 단방향 연관관계 객체를 테이블에 맞추어 모델링 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; // 객체를 테이블설계에 맞춘 모델링 @Column(name = "TEAM_ID") private Long teamId; 조회할 때는? ==> 식별자로 다시 조회, 객체 지향적인 방법이 아니다. 결론) 객체 지향 모델링 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; // 객체.. 2023. 10. 15. [김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 4. 엔티티 매핑 1~3 객체와 테이블 매핑 데이터베이스 스키마 자동 생성 • DDL을 애플리케이션 실행 시점에 자동 생성 • 테이블 중심 -> 객체 중심 • 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성 • 이렇게 생성된 DDL은 개발 장비에서만 사용 • 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용 DDL 생성 기능 • 제약조건 추가: 회원 이름은 필수, 10자 초과X -> @Column(nullable = false, length = 10) • 유니크 제약조건 추가 -> @Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"} )}) • DDL 생성 기.. 2023. 10. 13. 이전 1 2 3 4 5 ··· 28 다음