반응형

JPA 8

JPA - 복합키와 식별 관계 맵핑

JPA 는 영속성 컨텍스트에 보관할 때 식별자를 키로 사용한다고 했다. 식별자 구분시에는 equals 와 hashCode 를 사용하므로 식별자 필드가 2 개 이상이면 별도의 식별자 클래스를 만들어서 equals 와 hashCode 를 구현해야 한다. JPA 에는 복합 키 지원을 위해 @IdClass 와 @EmbeddedId 를 지원한다. 복합키를 사용하는 Characters클래스 복합키 사용시 @IdClass 를 이용하여 식별자 클래스로 맵핑하였다. 식별자 클래스의 특징을 다시한번 살펴보자면 Serializable 을 구현해야 하고, hashCode 와 equals 를 오버라이드 해야한다. 또한 식별자 클래스의 속성명과 엔티티의 속성명이 같아야 한다. 위의Collection 엔티티는 Character 엔..

JPA 2023.05.29

@MappedSuperclass

공통 매핑 정보가 필요할 때 사용한다. 우선 이 어노테이션이 사용된 클래스는 1.엔티티가 아니다. 2.테이블과 매핑되지 않는다. 3.이 클래스의 역할은 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다. 4. 조회, 검색 불가하며 5.직접 생성해서 사용할 일이 없으므로 추상 클래스 권장한다. 정리 테이블과는 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할이다. 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통 으로 적용하는 정보를 모을 때 사용 @Entity 클래스는 엔티티나 @MappedSuperclass로 지 정한 클래스만 상속이 가능

JPA 2022.04.08

1:1매핑

1:1매핑은 다대일 단방향 매핑과 유사하다. 다대일 양방향 매핑 처럼 외래 키가 있는 곳이 연관관계의 주인이되고 반대편은 mappedBy 적용한다. 기본적으로 주 객체가 대상 객체의 참조를 가지는 것 처럼 주 테이블에 외래 키를 두고 대상 테이블을 찾ㄴ,ㄴ디/ 장점: 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인 가능 단점: 값이 없으면 외래 키에 null 허용 아래처럼 교차하여 구성하는건 추천되지 않는다. 프록시 기능의 한계로 지연 로딩으로 설정해도 항상 즉시 로딩되기 때문이다. 추가적으로 다대다 매핑은 실무에서 사용하지 않는편으로 중간에 새로운 테이블을 두어 두개의 일대 다를 만드는것이 안전하다. 왜냐하면 연결 테이블이 단순히 연결만 하고 끝나지 않으며 주문시간, 수량 같은 데이터가 들어올..

JPA 2022.03.17

양방향 매핑

객체는 다른 객체를 부를떄 참조를 한다. 하지만 테이블을 FK를 조인으로 이용하여 가져온다. 이러한 둘의 차이가 있는데.. 기존 개발에서는 객체를 테이블에 맞추어 모델링 (참조 대신에 외래 키를 그대로 사용) 하였다. 이를 단방향 연관관계를 이용하면 Menber에 Team 타입으로 변수를 만들어 연결해줄 수 있다. 현재 1개의 팀이 여러명의 멤버를 가질 수 있기때문에 ManyToOne을 team변수에 넣어준다. 이렇게 Team team이 테이블에서 FK로 매핑되는걸 알수 있다. 하지만 멤버에서 팀을 찾을수는 있지만 팀에서는 멤버를 찾을 수 없다. 이때 이제 양쪽을 매핑해주는 양방향 매핑을 사용하면된다.! 멤버는 단방향 매핑때와 동일하게 유지하고 Team클래스에는 Member타입의 리스트를 만들어준다. 보..

JPA 2022.03.16

[JPA] 매핑 어노테이션 정리 [column,Temporal, Enumerated, Lob, Transient]

매핑 어노테이션 정리 어노테이션 설명 @Column 컬럼 매핑 @Temporal 날짜 타입 매핑 @Enumeratedenum 타입 매핑 @Lob BLOB, CLOB 매핑 @Transient 특정 필드를 컬럼에 매핑하지 않음(매핑 무시) 예시.) @Column 속성 정리 1.1 updatable을 false를 해두면 데이터베이스에서 강제 수정을 하지 않는이상 변경되지 않는다. 예시.) 1.2 nullable(DDL) 은 null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다. 참고: [JPA] nullable = false와 @NotNull의 차이점 (tistory.com) [JPA] nullable = false와 @NotNull의 차이점 지금 보시..

JPA 2022.03.13

JPA @Entity @Table @Column

@Entity • @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 • 주의 • 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) • final 클래스, enum, interface, inner 클래스 사용X • 저장할 필드에 final 사용 X 속성: name • JPA에서 사용할 엔티티 이름을 지정한다. • 기본값: 클래스 이름을 그대로 사용(예: Member) • 같은 클래스 이름이 없으면 가급적 기본값을 사용한다 @Table @Table은 엔티티와 매핑할 테이블 지정 name - 매핑할 테이블 이름 (엔티티 이름을 사용) catalog- 데이터베이스 catalog 매핑 schema- 데이터베..

JPA 2022.03.12

JPA Query update오류 해결

프로젝트에 조회수를 늘리는 코드를 짜기위해 JPA에 @Query를 이용하던 중 오류가 발생했다. not supported for dml operations ~~~ 찾아보니 UPDATE 쿼리를 실행할 때는 @Modifying annotation 을 붙여줘야한다. 그리고 @Transactional 또한 같이 붙여주도록 하자. 이후 실행을 해보니 Modifying queries can only use void or int/Integer as return type! 이라는 오류가 발생 쿼리 수정은 반환 유형으로 void 또는 int / Integer 만 사용할 수 있다는 뜻이다. Integer로 유형을 바꿔주니 잘 돌아간다.

JPA 2021.06.22
반응형