본문 바로가기

framework

(4)
@RequiredArgsConstructor 의존성 주입 의존성주입의 종류로는 Constructor(생성자),Setter,Field 타입이 있다. Constructor(생성자) public class ExampleCase { private final ChocolateService chocolateService; private final DrinkService drinkService; @Autowired public ExampleCase(ChocolateService chocolateService, DrinkService drinkService) { this.chocolateService = chocolateService; this.drinkService = drinkService; } } Setter public class ExampleCase{ private..
JPA EntityManager 영속성 컨텍스트 @PersistenceContext 1. 영속성 컨텍스트란? 영속성 컨텍스트(Persistence Context)는 JPA에서 'Entity를 영구 저장하는 환경'이라고 해석할 수 있다. EntityManagerFactory에서 생성된 EntityManager로 Entity를 관리(저장, 조회 등)할 때 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 2. Entity 생명주기 Entity는 비영속, 영속, 준영속, 삭제 4개의 상태가 있다. 생명 주기 비영속 영속성 컨텍스트와 전혀 관계가 없는 상태이다. 쉽게 말해 Entity 객체를 persist하지 않아 영속성 컨텍스트에 저장되지 않은 상태이다. Member member = new Member(); member.setName("test"); //entityManager.persist(m..
Spring boot 연관관계 매핑 연관관계 매핑 엔티티( Entity )들은 대부분 서로 관계를 맺고 있습니다. 예를들어 Category 엔티티와 Book 엔티티가 있을 때, Category에는 많은 Book을 갖는 관계를 갖고 있습니다. 이렇게 엔티티들이 서로 어떤 연관관계를 맺는지 파악하는 것은 매우 매우 중요합니다. 연관관계 매핑이란 객체의 참조와 테이블의 외래키를 매핑하는 것을 의미합니다. JPA에서는 JDBC( Mybatis )를 사용했을 때와 달리 연관 관계에 있는 상대 테이블의 PK를 멤버변수로 갖지 않고, 엔티티 객체 자체를 통째로 참조합니다. 예를들어 Category 엔티티와 Book 엔티티의 관계에서 Book 엔티티가 Category 엔티티를 참조할 때 Mybatis와 JPA는 아래와 같이 다릅니다. // Mybatis..
Spring boot JPA @Embedded, @Embeddable 임베디드 타입 임베디드 타입은 복합 값 타입으로 불리며 새로운 값 타입을 직접 정의해서 사용하는 JPA의 방법을 의미한다. 아래의 코드를 보면 User엔티티는 id, 이름, 이메일, 성별, 주소정보의 데이터를 갖고 있는데 주소 정보가 도시, 구, 상세주소, 우편번호 등으로 여러개의 컬럼으로 나눠져 있는 것을 볼 수 있습니다. -> 이렇게 상세한 데이터를 그대로 갖고 있는 것은 객체지향적이지 않으며 응집력을 떨어뜨립니다. 이럴때 임베디드 타입을 사용하면 더욱더 객체지향적인 코드를 만들 수 있습니다. // user.java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @No..