JPA5 [JPA] 일대다 조인할때 영속성 컨텍스트 내부 모습 & distinct 엔티티와 데이터베이스를 매핑을 아래와 같이 한다. @Entity class User{ ... @ManyToOne(fetch = FetchType.LAZY ) private Team team; ... } @Entity class Team{ @OneToMany(mappedBy = "team") // 기본적으로 LAZY private List users = new ArrayList(); ... } 데이터 베이스는 미리 데이터를 인서트 해놓았다. 팀을 기준으로 유저들을 join 하면 재밌는 일이 발생한다. 즉 아래와 같은 코드가 있을때 출력을 생각해보자. List teams = em.createQuery("select t from Team t join fetch t.users").getResultList(); .. 2020. 8. 6. [JPA / JPQL] @ManyToOne, @OneToOne 과 묵시적 조인 JPQL 은 엔티티를 대상으로 날리는 sql 과 비슷하다. JPQL에서 주의해야할 점이 있다. 만약 User 라는 객체에 Team이라는 객체가 @ManyToOne으로 매핑되었다고 가정하자. 유저마다 유저가 속한 팀을 가져오라는 쿼리는 다음과 같다. select u.team from User u ; 그러면 당연하게 받아 들일 수도 있다. 하지만 실제 sql 을 보면 JOIN문이 들어가 있다. 그럴수 밖에 없다. 유저의 팀을 가져오려면 유저와 팀을 조인해야한다. 이를 JPQL에서는 묵시적으로 조인해준다. 실제 날리는 쿼리는 아래와 같다. select t from User u join u.team t 이처럼 단일값을 연관관계로 가지는@ManyToOne 이나 @OneToOne 에서 "." 을 이용하여 가져온다면.. 2020. 8. 6. [JPA] EntityManager 명령어 정리 find(class이름,기본키) 해당하는 객체를 영속성 컨텍스트로 가져온다. 영속성 컨텍스트에 이미 객체가 있다면 객체를 그대로 반환한다. 객체가 프록시객체라면 프록시 객체를 반환한다. (동일성 보장) persist(object) 객체를 영속화 한다. 영속성 컨텍스트에 객체를 저장한다. remove(object) 영속성 컨텍스트에서 객체를 제거한다. createQuery(jpql) jpql을 sql로 쿼리를 생성해 데이터베이스에 전송한다. detach(object) 영속상태의 객체를 비영속상태로 만든다. clear 영속성 컨텍스트를 비운다. flush 영속성 컨텍스트의 내용과 데이터베이스의 내용을 동기화한다. close 영속성컨텍스트를 더이상 관리하지 않는다. 2020. 8. 6. [JPA] 영속성과 영속성 컨텍스트 영속성 컨텍스트에 관한 언급은 공식사이트에도 있다. https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html EntityManager (Java(TM) EE 7 Specification APIs) Interface used to interact with the persistence context. An EntityManager instance is associated with a persistence context. A persistence context is a set of entity instances in which for any persistent entity identity there is a unique entity i.. 2020. 8. 6. [JPA] ORM 의미 및 JPA 는 왜 쓰는가? 출처) ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EA%B4%80%EA%B3%84_%EB%A7%A4%ED%95%91 객체 관계 매핑 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 객체 관계 매핑(Object-relational mapping; ORM)은 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다. 객체 지향 ko.wikipedia.org ORM을 검색하면 정의는 객체 관계 매핑이라고 한다. 왜 객체 관계 매핑이라는 단어가 생겨났는가? ORM이 생긴 이유를 알기 위해서는 객체 지향 프로그래밍 언어의 객체와 데이터베이스의 데이터의 차이를 알아야 한다. 과일상자라는 객체를 java에서 클래스로 생성한.. 2020. 8. 6. 이전 1 다음