1. 객체와 Table 매핑
- application.properties
- Member(엔티티) : @Column의 옵션 name으로 이름을 지정해줄 수 있다.
- resources/data.sql
- h2.console
- 세팅완료!
2. 상세
- @Entity : 이 클래스를 테이블과 매핑한다고 JPA에게 알려준다. (이를 엔티티 클래스라고 한다.)
- @Table : 엔티티클래스에 매핑할 테이블 정보를 알려준다. 생략하면 클래스 이름을 테이블 이름으로 매핑한다.
- @Id : PK에 해당한다. 식별자 필드라고 한다.
- @Column : 컬럼에 매핑한다. 생략이 가능하다. 생략하면 필드명이 컬럼명이 된다.
- 대소문자를 구분하지 않는 DB를 사용하면 명시적으로 매핑해야 한다.
persistence.xml
- 현대적인 SpringBoot 환경에서 persistence.xml 파일은 필요하지 않다.
- 설정은 모두 application.properties 에서 가능하다.
EntityManagerFactory
- 현대적인 SpringBoot 환경에서 별도의 생성/설정 코드가 필요하지 않다.
- 스프링이 자동으로 생성하고 컨테이너에서 관리하기 때문
- @PersistenceContext 를 통해 직접 주입받아서 사용할 수 있다.
- 보통 JpaRepository나 CrudRepository 인터페이스를 사용하면 된다.
현대적인 SpringBoot 코드
- em.persist(member) 와 같은 영속화 코드는 현대 SpringBoot에서는 사용하지 않는다.
- JpaRepository 인터페이스에서 제공하는 Repository.save(member); 와 같은 코드로 사용한다.
- .save() 메서드는 member가 null이면 새로 생성하는 persist 연산을 수행하고, 존재한다면 merge 연산을 수행한다.
- JPA에서는 단순히 엔티티 값만 변경하더라도 어떤 엔티티가 변경되었는지 추적하는 기능을 가지고 있다.
- 그래서 member.setAge(30) 같이 단순 엔티티만 변경해도 추적해서 알아서 update를 수행한다.
- 이는 영속성과 관련이 있다.
- Spring 환경에서는 @Transaction 환경 내에서만 동작한다.
- 잘 바뀌었다.
- delete와 findById 등 메서드가 많다.
'Backend - Java Spring > JPA 기초와 원리' 카테고리의 다른 글
[JPA] JPA (0) | 2024.02.21 |
---|
댓글