반응형 Study53 [JPA] 공통 속성 매핑 공통 속성 매핑 Audit과 같이 상속 관계는 아니지만 생성일자, 수정일자 등 공통적인 속성을 여러 클래스가 사용해야 하는 경우가 있다. JPA에서 이런 공통 속성을 매핑하는 방법에 대해 알아보자. 실습하기 전 공통 속성을 물려받을 테스트용 클래스를 만들어주자. @Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue private Long id; private String name; } @MappedSuperClass 위의 그림과 같이 공통 속성을 상속받고 싶을 경우 부모 클래스에 @MappedSuperClass 어노.. 2022. 8. 26. [JPA] 상속관계 매핑 Intro 관계형 데이터베이스에서는 기본적으로 상속 관계를 지원하지 않는다. JPA에선 이런 문제를 해결해줄 수 있는 3가지 상속관계 매핑 방법을 지원한다. 이번 시간엔 JPA를 통해 상속 관계를 매핑하는 방법에 대해 알아보자. 실습하기 전 아래의 간단한 테스트용 Entity 2개를 만들어보자. @Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor(access = AccessLevel.PROTECTED) public class Item { @Id @GeneratedValue private Long id; private String name; private int price; } @Entity @Getter @Setter @NoArgsConstru.. 2022. 8. 26. [JPA] 연관관계 매핑 Intro DB를 설계할 때 테이블이 하나만 있는게 아닌 이상 거의 대부분의 경우에 테이블 간 연관관계 설정이 필요하다. 연관관계 종류로는 1:1, 1:N, N:1, M:N이 있으며, Foreign Key를 사용해 매핑해야 한다. 하지만 JPA에선 Entity에 연관된 테이블의 ID를 넣는 것 대신 객체 자체를 변수로 넣을 수 있게 해준다. 실습하기 전 아래의 간단한 테스트용 Entity 2개를 만들어보자. @Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue private Long id; private String.. 2022. 8. 25. [JPA] Entity 필드, 컬럼 매핑 Intro JPA에서 영속성 컨텍스트와 함께 가장 중요한 개념인 엔티티 매핑이다. Java의 클래스와 DB의 테이블을 변환해주고, 옵션을 설정하기에 따라 테이블을 자동으로 생성해주기도 한다. 아래의 간단한 클래스를 테이블로 매핑해보자. Entity의 경우 protected 또는 public의 기본 생성자가 반드시 있어야 하며, 클래스 또는 저장할 필드에 final을 붙이면 안된다. @Getter @Setter @NoArgsConstructor public class Member { private Long id; private String name; private String password; } @Entity, @Table 우선 "이 클래스가 엔티티이며, JPA에서 관리하도록 하겠다" 라는 의미를 부여하.. 2022. 3. 5. [JPA] 영속성 컨텍스트 영속성 컨텍스트 (Persistence Context)란? Entity를 영구적으로 저장하는 환경으로, JPA를 이해하기 위해 빼놓을 수 없는 개념이다. 논리적인 개념이기에 눈에 보이지 않고, EntityManager를 통해 접근할 수 있다. 우리가 이전 시간에 사용했던 EntityManager.persist(Entity)가 Entity를 영속성 컨텍스트에 저장한다는 뜻이다. 영속성 컨텍스트의 생명주기 영속성 컨텍스트엔 아래의 4가지 생명주기가 있다. 비영속 (New) 이제 막 생성되어 영속성 컨텍스트와 아무런 상관이 없는 상태이다. Member member = new Member(); member.setId("member"); member.setName("회원"); 영속 (Managed) 엔티티가 영속.. 2022. 3. 5. [JPA] DB에 데이터 넣어보기 DB에 데이터 넣어보기 이전 시간에 아래의 코드를 작성했다. public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); //code tx.commit(); em.close(); emf.close(); } } 이번 시간에는 코드에 들어간 클래스들에 대해 간단히 정리하고 넘어가고자 한다. EntityManagerFactory 애플리케이션 로.. 2022. 2. 26. [JPA] JPA 프로젝트 설정 JPA란? Java Persistence API의 약자로, 자바의 ORM 기술의 표준이다. 즉, JPA는 ORM을 위한 인터페이스 같은 개념이고, 이 인터페이스를 구현만 하면 JPA로 사용할 수 있다. 예를 들자면, 우리가 아는 대표적인 JPA 구현체로는 Hibernate가 있지만, EclipseLink나 DataNucleus 같이 JPA 인터페이스를 구현한 다른 구현체들도 Hibernate 대신 교체해서 쓸 수 있는 것이다. JPA 프로젝트 생성 [File] - [New Project] 를 선택하고 Maven 또는 Gradle 프로젝트를 생성한다. 그 후 JPA를 사용하기 위해 Dependency를 추가해준다. 이번 프로젝트의 경우 JPA의 구현체 중 Hibernate를 선택하도록 하겠다. Maven .. 2022. 2. 26. [Spring Boot] AOP 적용해보기 Intro AOP는 Aspect Oriented Programming의 약자로, 관점 지향 프로그래밍이라는 뜻을 갖고 있다. 여러 모듈들에서 공통 관심 사항을 묶어 핵심 관심 사항과 따로 분리시켜버리는 것이다. 예를 들어 모든 함수의 실행시간을 측정하고 싶다고 할 때, 원래는 함수 하나하나 들어가서 아래와 같이 시간 측정 코드를 넣어줘야 한다. private void function() { long start = System.currentTimeMillis(); try { //기존 코드 } finally { long finish = System.currentTimeMillis(); long timeMs = finish - start; System.out.println("Total time: " + tim.. 2022. 2. 15. [Spring Boot] Spring Data JPA 써보기 Intro 이전 시간에 JPA를 사용해서 DB와 연결해봤다. JDBC에서 JPA로 대체하는것 만으로도 코드가 엄청 많이 줄었는데 여기서 더 줄이는 방법이 있다고 한다. 바로 Spring Data JPA를 사용하는 것이다. Spring Data JPA 써보기 우선 SpringDataJpaMembeRepository 인터페이스를 만들어주고, JpaRepository랑 이전에 만든 MemberRepository를 상속시켜주자. SpringDataJpaMemberRepository.java package com.devjaewoo.hellospring.repository; import com.devjaewoo.hellospring.domain.Member; import org.springframework.data.. 2022. 2. 15. 이전 1 2 3 4 5 6 다음 반응형