JPA 사용 시 주의할 점 영속 상태 보장 JPA Entity는 영속상태인가, 아닌가에 따라서 동작 상 제한사항이 있을 수 있다. 예를 들면, 영속 상태의 entity는 delete가 가능하지만 비영속 상태의 entity는 불가능하다. 특정 로직을 수행하는 경우 영속 상태를 인지하고 있어야한다. @Transactional public void deleteQuestion(User loginUser, Question question) throws CannotDeleteException { if (question.isDeleted()) { throw new CannotDeleteException("이미 삭제된 질문입니다."); } if (!question.isOwner(loginUser)) { throw ne..
Java/JPA
김영한 님의 자바 ORM 표준 JPA 프로그래밍을 읽고 정리한 내용입니다. 교보문고 링크 😀 다양한 연관관계 매핑 엔티티 연관관계 매핑 시 고려할 3가지 다중성 단방향/양방향 연관관계의 주인 1. 다중성 연관관계는 보통 4가지 다중성을 갖는다. 다대일 일대다 일대일 다대다 다대일, 일대다 관계를 많이 사용하며 다대다 관계는 거의 사용되지 않는다. 2. 단방향/양방향 테이블과는 달리 객체는 참조용 필드를 가지며, 그 필드를 통해 연관 객체를 조회한다. 한 쪽이 다른 한 쪽을 일방적으로 참조하면 단방향이며 서로 참조하면 양방향이다. 3. 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연관 관계를 가질 수 있기 때문에 연관관계를 관리하는 포인트는 외래키 하나이다. 엔티티가 양방향으로 참조되면 A → B,..
김영한 님의 자바 ORM 표준 JPA 프로그래밍을 읽고 정리한 내용입니다. 교보문고 링크 연관관계 매핑 기초 객체는 참조를 사용하여 연관 관계를 맺고 테이블은 외래 키를 사용해서 연관 관계를 맺는다. 관계가 있는 다른 데이터를 참조한다는 점에서 동일하지만, 참조와 외래 키는 완전히 다른 특징을 갖는다. 연관관계 매핑을 이해하기 위한 두 가지 키워드가 있다. 방향 : 회원/팀이라는 관계를 생각해본다. 단방향 : 회원 → 팀, 팀 → 회원 둘 중 한 쪽만 참조하는 관계 양방향 : 회원 → 팀, 팀 → 회원 둘이 서로를 참조하는 관계 다중성 1:1 (일대일) 1:N (일대다 혹은 다대일) N:M (다대다) 연관관계의 주인 : 양방향 연관관계를 만들 떄 연관 관계의 주인을 정해야 한다. 단방향 연관관계 가장 먼..
김영한 님의 자바 ORM 표준 JPA 프로그래밍을 읽고 정리한 내용입니다. 교보문고 링크 엔티티 매핑 JPA에서 실제 테이블에 연결하는 객체를 엔티티라고 부른다. 따라서 엔티티와 테이블을 정확히 매핑시켜 사용하는 것이 매우 중요하다. 아래는 매핑을 위한 대표적인 Annotation 목록이다. 객체와 테이블 매핑 @Entity @Table 기본 키 매핑 @Id 필드와 컬럼 매핑 @Column 연관관계 매핑 @ManyToOne @JoinColumn @Entity 테이블과 매핑할 클래스엔 @Entity가 반드시 붙어야 한다. 속성 name (Default : 클래스명) entity에 사용할 이름 엔티티 중복은 허용되지 않는다. entity의 이름과 테이블 이름은 다른 개념이다. 주의사항 기본 생성자는 반드시 ..
김영한 님의 [자바 ORM 표준 JPA 프로그래밍]을 읽고 내용을 정리한 것입니다. 교보문고 링크 EntityManager와 영속성 컨텍스트 mybatis처럼 직접 SQL을 작성하거나 JPA를 활용한 개발을 할 때는 눈에 보이는 것 이상의 차이가 있다. 가장 사소한 예시를 들어보자면 CRUD로 불리는 가장 기본적인 4가지 동작 중 UPDATE는 JPA에 존재하지 않는다. 그럼에도 JPA는 업데이트 동작을 잘 수행한다. 영속성 컨텍스트가 데이터의 변경을 감지하여 자동으로 update 쿼리를 실행하기 때문이다. JPA는 EntityManager와 영속성 컨텍스트를 통해 데이터의 상태 변화를 감지하고 필요한 쿼리를 자동으로 수행한다. Spring boot + Spring Data를 사용하여 막 JPA를 배우는..