본문 바로가기

[IT]/JPA4

[JPA] JPA 임베디드 타입 (값 타입 과 불변객체) JPA의 데이터 타입 JPA의 데이터 타입은 크게 두 가지 엔티티 타입과 값 타입으로 나뉜다. 엔티티 타입은 연관관계 매핑 시, @Entity로 선언한 객체를 필드 값으로 넣은 것을 떠올리면 되고, 값 타입은 int, Integer, String처럼 그 자체가 단순한 값을 가지고 있는 타입들이 속한다. - 엔티티 타입 - @Entity로 정의하는 객체 - 데이터가 변해도 식별자로 추적 가능 - 예) Member 엔티티 이름, 나이 등을 변경 시 id값으로 식별할 수 있음. - 값 타입 - 단순히 자바 기본 타입이나 객체 - 식별자가 없고 단순한 값이므로 추적이 불가능함. - 예) 물품 개수를 100개에서 200개로 변경하면 완전히 다른 값으로 대체된다. 엔티티 타입은 @Entity로 선언한 객체 자체를 .. 2021. 3. 25.
[JPA] JPA 프록시 JPA 프록시 다음과 같이 Team 엔티티와 Member엔티티가 1:N 연관관계에 있다고 생각해보자. 위와 같이 Member 엔티티에는 Team이라는 타입의 필드 값이 존재하게 된다면, Member 엔티티를 조회할 때마다 매핑된 Team에 대한 정보도 같이 조회될 것이다. 즉, 관계된 모든 테이블에 쿼리가 발생하고 연관관계가 많아지면 상상할 수 도 없을 만큼의 select 쿼리가 발생하게 될 것이다. 추가로 Member 객체를 조회했지만 당장 Team에 대한 정보를 필요로 하지 않는 경우도 있을 것이다. 이때도 Team에 대한 쿼리가 발생하는데, JPA는 프록시 개념을 이용해 쿼리가 발생하지 않도록 처리한다. EntityManager의 getReference(class, Object)라는 메소드를 호출하.. 2021. 3. 22.
[JPA] 양방향 연관관계에서의 주의할 점( N:1 ) JPA의 연관관계 문제점 JPA의 영속성 컨텍스트는 데이터베이스를 객체 관점으로 관리하기 위해 만들어졌지만, 태생적인 차이로 문제점이 생기곤 하는데, 이번에는 연관관계 설정시 주의할 점을 알아보자 [데이터베이스 관점] [객체 관점] JPA를 사용하게되면 객체와 DB의 연관관계 방식의 불일치로 문제점이 생기게 된다. // ----------테스트 코드 ------------// Team team1 = new Team(); Team team2 = new Team(); team1.setName("team1"); team2.setName("team2"); teamRepository.save(team1); teamRepository.save(team2); Member member1 = new Member(); M.. 2021. 3. 19.
[JPA] JPA의 영속성 관리 (JPA 영속성 컨텍스트) 이번에는 JPA 영속성 컨텍스트, 엔티티의 라이프 사이클, 영속성 컨텍스트가 엔티티 매니저에 의해 어떻게 관리되는지 알아봅시다! 1. 엔티티 매니저 팩토리 & 엔티티 매니저 //JpaMain.java 중 일부 //엔티티 매니저 팩토리 생성 EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성 EntityTransaction tx = em.getTransaction(); //트랜잭션 기능 획득 엔티티 매니저 팩토리는 하나를 공용으로 쓰고 엔티티 매니저를 생성한다. 엔티티 매니저는 DB와 상호작용 하는 역할을 한다. 엔.. 2021. 3. 16.
728x90