목록java/JPA (7)
쿵쿵일지
객체지향 쿼리 언어 객체지향 쿼리 소개 JPQL JPQL은 엔티티 객체를 조회하는 객체지향 쿼리. 문법은 SQL과 비슷함. JPQL은 SQL을 추상화해서 특정 데이터베이스에 의존하지 않는다. 데이터베이스 Dialect만 변경하면 JPQL을 수정하지 않아도 자연스럽게 데이터베이스를 변경할 수 있다. @Entity(name = "Member") public class Member { @Column(name = "name") private String userName; } String jpql = "select m from Member as m where m.userName = 'kim'"; List resultList = em.createQuery(jpql, Member.class).getResultList..
값 타입 기본값 타입 가장 단순한 기본값 타입 @Entity public class Member { @Id @GeneratedValue private Long id; private String name; private int age; } 임베디드 타입(복합 값 타입) @Entity public class Member { @Id @GeneratedValue private Long id; private String name; @Embeded private Period workPeriod; @Embeded private Address homeAddress; } @Embeddable public class Period { @Temporal(TemporalType.DATE) java.util.Date startD..
1. 프록시엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것이 아님.여기서 보면 getTeam()은 사용할 때 가져오면 됨. JPA는 이런 문제를 해결하려고 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공한다. 이것을 지연로딩이라 한다. em.find(Member.class, "member1"); 이 메소드는 영속성 컨텍스트에 엔티티가 없으면 데이터베이스를 조회.em.getReference(Member.class, "member1"); 이렇게 엔티티를 조회하면 JPA는 데이터베이스를 조회하지 않고 실제 엔티티 객체도 생성하지 않는다. 대신에 데이터베이스 접근을 위임한 프록시 객체를 반환한다. 프록시의 특징 프록시 클래스는 실제 클래스를 상속받아 겉 모양이 같다. 사용하는 입장에..
엔티티의 연관관계를 매핑할 때는 다음 3가지를 고려해야 한다.다중성 (@ManyToOne, @OneToMany, @OneToOne, @ManyToMany)단방향, 양방향테이블은 외래 키 하나로 조인을 사용해서 양방향으로 쿼리가 가능반면 객체는 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있다. 객체 관계에서 한 쪽만 참조하는 것을 단방향 관계, 양쪽이 서로 참조하는 것을 양방향 관계연관관계 주인JPA는 두 객체 연관관계 중 하나를 정해서 데이터베이스 외래 키를 관리하는데 이것을 연관관계의 주인이라 한다.연관관계 주인은 mappedBy 속성을 사용하지 않는다. 연관관계의 주인이 아니면 mappedBy 속성을 사용하고 연관관계의 주인 필드 이름을 값으로 입력해야 한다. 다대일 다대일 단방향 다..
5.1 단방향 연관관계연관관계 중에선 다대일(N:1) 단방향 관계를 가장 먼저 이해해야 한다. 회원과 팀이 있다.회원은 하나의 팀에만 소속될 수 있다.회원과 팀은 다대일 관계다. 객체의 연관관계회원 객체는 Member.team 필드로 팀 객체와 연관관계를 맺는다.회원 객체와 팀 객체는 단방향 관계다. 테이블 연관관계회원 테이블은 TEAM_ID 외래 키로 팀 테이블과 연관관계를 맺는다.회원 테이블과 팀 테이블은 양방향 관계다.SELECT * FROM MEMBER M JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID;SELECT * FROM TEAM T JOIN MEMBER M ON T.TEAM_ID = M.TEAM_ID; 객체 연관관계와 테이블 연관관계의 가장 큰 차이참조를 통한 연관관계는..
엔티티 매핑 jpa를 사용하는데 가장 중요한 일은 엔티티와 테이블을 정확히 매핑하는 것 객체와 테이블 매핑 : @Entity, @Table기본 키 매핑 : @Id필드와 컬럼 매핑 : @Column연관관계 매핑 : @ManyToOne, @JoinColumn 4.1 @EntityJPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다.속성name : JPA에서 사용할 엔티티 이름을 지정, 설정하지 않으면 클래스 이름을 그대로 사용주의사항 : 기본 생성자는 필수final 클래스, enum, interface, inner 클래스에는 사용할 수 없다.저장할 필드에 final을 사용하면 안 된다. 4.2 @Table@Table은 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔..
영속성 관리해당 포스트는 자바 ORM 표준 JPA 프로그래밍 (김영한지음) 의 글을 토대로 작성하였습니다. 1. 엔티티 매니저 팩토리와 엔티티 매니저 JPA가 제공하는 기능은 크게 엔티티와 테이블을 매핑하는 설계 부분과 엔티티를 실제 사용하는 부분으로 나눌 수 있다. 엔티티 매니저는 엔티티를 저장, 수정, 삭제, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다. EntityManagerFactory emf = Persistence.createEntityMangerFactory("display");이렇게 호출 하면 META-INF/persistence.xml 에 있는 정보를 바탕으로 Entity..