본문 바로가기

JPA7

[JPA] @ElementCollection, @CollectionTable을 통한 값 타입 컬렉션 사용법 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체이다. 값타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) 값 타입 컬렉션 값 타입을 컬렉션에 담아서 사용하는 것을 값 타입 컬렉션이라고 한다. //기본 값 타입 컬렉션 List stringlist = new ArrayList(); //임베디드 값 타입 컬렉션 Set addressSet = new HashSet(); 만약 다음과 같이 데이터베이스 안에 값 타입 컬렉션을 저장하려면 어떻게 해야 할까? 기본적으로 관계형 데이터베이스에는 .. 2023. 4. 22.
[JPA] 프록시와 지연로딩 프록시프록시는 실제 객체를 참조하는 가짜 객체이다. 실제 클래스를 상속받아서 만들어져 실제 클래스와 겉모양이 같다. 프록시 객체는 실제 객체의 참조(target)를 보관하기 때문에 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. jpa에서 프록시 엔티티 객체를 호출하는 메서드는 em.getReference()이다. em.find()는 데이터베이스를 통해서 실제 엔티티 객체를 조회하지만 em.getReference()는 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회한다. 프록시 객체의 초기화프록시 객체에 getName() 같은 메서드를 사용하게 되면프록시 객체는 영속성 컨텍스트에 초기화 요청을 한다.영속성 컨텍스트에서 실제 DB를 조회하여실제 Entity를 생성한다.프록.. 2023. 3. 5.
[JPA] @MappedSuperclass 사용법 id, name 같은 정보들은 많은 객체에서 중복되어 사용된다. 이러한 공통 매핑 정보가 존재할 때 유용하게 사용할 수 있는 어노테이션이 @MappedSuperclass이다. @MappedSuperclass @MappedSuperclass는 상속관계 매핑, 엔티티, 테이블과 전혀 관계없이 부모클래스를 상속받는 자식 클래스에 매핑 정보만 제공한다. 직접 생성해서 사용할 일이 없으므로 추상클래스로 생성하는 것이 권장되고, 조회나 검색이 불가하다. 사용 방법 생성자, 생성시간, 수정자, 수정시간을 다수의 엔티티가 공통으로 가지는 상황에서 BaseEntity를 @MappedSuperclass를 사용하여 추상클래스로 생성한다. @Getter @Setter @MappedSuperclass public abstrac.. 2023. 3. 3.
[JPA] 상속관계 매핑 상속관계 매핑 관계형 데이터베이스는 상속관계라는 것이 존재하지 않는다. 그래서 객체 상속과 유사한 슈퍼타입, 서브타입 관계라는 모델링 기법을 이용한다. 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하여 상속관계 매핑을 한다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 크게 3가지가 있다. 각각 테이블로 변환 : 조인 전략 통합 테이블로 변환 : 단일 테이블 전략 서브타입 테이블로 변환 : 구현 클래스마다 테이블 전략 어노테이션 3가지 전략을 사용하기 위해서는 @Inheritance(strategy=InheritanceType.XXX)를 적용시켜 주면 된다 JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구현 클래스마다 테.. 2023. 3. 3.
[JPA] 연관관계 매핑 연관관계가 필요한 이유 다음과 같은 상황을 가정해 보자. 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. 객체를 테이블에 맞추어 모델링하는 경우 (연관관계가 없는 객체) 데이터베이스는 외래키 하나로 양쪽 테이블 조인이 가능하기 때문에 위와 같이 모델링할 수 있다. 객체 연관관계도 데이터베이스 테이블 연관관계와 동일하게 모델링하였다. 코드로 나타내면 다음과 같다. @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; … } @Entit.. 2023. 2. 28.
[JPA] 기본 키 매핑 방법 기본 키 매핑 방법 직접 할당 자동 생성 직접 할당 @ID만 사용하여 기본 키를 정하고 값을 직접 할당하는 방법이다. Member member = new Member(); member.setId("1"); // 기본키 직접 할당 em.persist(member); 자동 생성 @GenerateValue를 사용하여 자동으로 기본키를 생성한다. IDENTITY: 기본키 생성을 데이터베이스에 위임한다. SEQUENCE: 데이터베이스 시퀀스 오브젝트를 사용한다. TABLE: 키 생성용 테이블을 사용한다. • AUTO: 방언에 따라 자동 지정한다. 기본 값이다. IDENTITY 전략 기본 키 생성을 데이터베이스에 위임한다. 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용한다. (MySQ.. 2023. 2. 27.