본문 바로가기

Spring/JPA

(30)
JPA- flush와 영속성 관리 flush 플러쉬를 사용하면 쓰기지연 저장소에 있는 쿼리를 DB에 날릴 수 있다. 쉽게 말하면 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것이다. em.flush(); //em.commit() 이전에 플러시해줌 commit을 하면 자동을 flush가 되지만 em.flush()로 commit 이전에 flush를 진행할 수도 있다. 준영속 상태 1) em.detach(entity); 특정 엔티티만 영속성 컨텍스트에서 제거 package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import java..
JPA- 영속성 컨텍스트 영속성 컨텍스트 마치 어플리케이션과 DB 사이에 하나의 계층이 있다고 생각하면 된다. 영속 컨텍스트의 장점 1) 엔티티가 영속성 컨텍스트에 저장되어 있는 경우 영속성 컨텍스트가 있을때의 장점은 조회를 빠르게 진행할 수 있다는 것이다. 예를들어 Member 엔티티가 존재한다고 하자. 이 엔티티는 DB에 저장이 되어있을 뿐만 아니라 영속성 컨텍스트에도 저장이 되어있다. 그렇기 때문에 find()로 조회를 하는 경우에 DB에서 뒤질 필요없이 영속성 컨텍스트의 1차 캐시에서 먼저 찾아 반환을 하면된다. 위 처럼 영속 컨텍스트에 id가 member1인 member 엔티티는 DB에서 찾을 필요 없이 영속 컨텍스트에서 조회하여 반환한다. 영속 상태의 엔티티를 조회 package hellojpa; import java..
JPA- EntityManager.find()로 조회하기 package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em..
JPA- 관련 개념 정리 @Entity 엔티티는 JPA가 관리할 객체이다. (테이블에 대응하는 하나의 클래스) @Id 데이터베이스 PK와 매핑하는 것이다. DB에 데이터 저장하기 1) 데이터 베이스에 테이블 생성하기 2) 객체를 생성해서 테이블에 데이터 넣기 Member.java package hellojpa; import jdk.nashorn.internal.objects.annotations.Getter; import javax.persistence.Entity; import javax.persistence.Id; @Entity //엔티티 등록: JPA가 관리하는 객체임을 알려줌 public class Member { @Id //id 등록 private Long id; private String name; public Lon..
JPA- 지연 로딩과 즉시 로딩 //대강 이런 상황 public class Team { ... } public class Member{ Team team; } 지연 로딩 지연 로딩은 조회하고자 하는 객체 member와 연관된 다른 객체 team이 있다고 해도 member만 조회하고 team은 team이 실제로 사용될 때 로딩하는 것이다. member를 조회해도 team을 많이 사용하지 않는 경우라면 지연 로딩이 낫다. -> DB 조회 시 당장 쓸 객체만 가져오고 연관된 객체는 필요할 때 끌고옴 즉시 로딩 즉시 로딩은 조회하고자 하는 객체 member와 연관된 다른 객체 team도 한번에 미리 조회하는 것이다. 이 경우는 team은 필요가 없다고 해도 member를 조회함과 동시에 team도 함께 조회한다. member를 조회할 때 te..
JPA- Transaction 트랜잭션 트랜잭션은 데이터 베이스의 상태를 바꾸기 위해서 수행하는 작업의 단위이다. 그리고 데이터 베이스의 상태를 바꾸는 것은 SQL(select, insert, update, delete)문을 사용하여 데이터 베이스에 접근하는 것을 의미한다. 게시판을 예로 들어보자. 게시판 사용자는 게시글을 작성하고, 올리기 버튼을 누른다. 그 후에 다시 게시판에 돌아왔을때, 게시판은 자신의 글이 포함된 업데이트된 게시판을 보게 된다. 이러한 상황을 데이터베이스 작업으로 옮기면, 사용자가 올리기 버튼을 눌렀을 시, Insert 문을 사용하여 사용자가 입력한 게시글의 데이터를 옮긴다. 그 후에, 게시판을 구성할 데이터를 다시 Select 하여 최신 정보로 유지한다. 여기서 작업의 단위는 insert문과 select문 둘..