다중성은 왼쪽을 연관관계의 주인으로 한다. 다대일의 경우 다(N)가 연관관계의 주인이다. 다대일 단방향(N:1)다대일 관계의 반대 방향은 항상 일대다 관계다.일대다 관계의 반대 방향은 항상 다대일 관계다.외래키는 항상 다쪽에 있다.객체 양방향 관계에서 연관관계의 주인은 항상 다쪽이다. 다대일 양방향(N:1, 1:N)양방향은 외래키가 있는 쪽이 연관관계의 주인이다.항상 다(N)에 외래키가 있다. 주인이 아닌 쪽은 조회를 위한 JPQL이나 객체 그래프를 탐색할 때 사용한다. 양방향 연관관계는 항상 서로를 참조해야 한다.항상 서로를 참조하게 하려면 연관관계 편의 메소드를 작성하는 것이 좋다. 편의 메소드는 한 곳에만 작성하거나 양쪽 다 작성할 수 있다. 하지만 양쪽 다 작성하면 무한루프에 빠질 수 있음으로 ..
ORM(Object Relational Mapping)에서 가장 어려운 부분은 객체 연관관계와 테이블 연관관계를 매핑하는 일이다. 연관관계 매핑을 위한 핵심 키워드- 방향 : 한쪽만 참조하는 것을 단방향 관계라고 한다. 양쪽 모두 참조하는 것을 양방향 관계라고 한다. 방향은 객체관계에만 존재한다. 테이 블 관계는 항상 양방향이다.- 다중성 : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M)- 연관관계의 주인 : 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야 한다. 단방향 연관관계회원과 팀이 있다.회원은 하나의 팀에 소속될 수 있다.회원과 팀은 다대일 관계다. 객체 연관관계회원 객체와 팀 객체는 단방향 관계다. Member.team필드를 통해서 팀을 ..
@Column객체 필드를 테이블 컬럼에 맵핑한다.속성- name : 필드와 매핑할 테이블의 컬럼 이름- insertable : 엔티티 저장 시 이 필드도 같이 저장한다. false로 지정하면 DB에 저장하지 않는다. (false는 읽기 전용)- updateable : 엔티티 수정 시 이 필드도 같이 수정한다. false로 지정하면 DB에 수정하지 않는다. (false는 읽기 전용)- table : 하나의 엔티티를 두 개 이상의 테이블에 맵핑할 때 사용한다. 지정한 필드를 다른 테이블에 매핑할 수 있다. (거의 사용하지 않는 다.)- nullable(DDL) : null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다.-..
JPA의 다양한 매핑 어노테이션 4가지 분류- 객체와 테이블 매핑 : @Entity, @Table- 기본 키 매핑 : @Id- 필드와 컬럼 매핑 : @Column- 연관관계 매핑 : @ManyToOne, @JoinColumn XML을 사용한 맵핑과 어노테이션을 사용한 맵핑 방식이 있지만, 직관적이고, 쉬운 어노테이션 맵핑을 보겠다. @EntityJPA를 사용해서 테이블과 맵핑할 클래스는 @Entity를 필수로 붙여야 한다.@Entity가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라고 부른다.속성- name : JPA에서 사용할 엔티티 이름을 지정주의사항- 기본 생성자는 필수(public or protected)- final 클래스, enum, interface, inner 클래스에는 사용 불가- 저..
다썼는데 글이 날라갔다..... 엔티티 매니저와 엔티티 매니저 팩토리엔티티 매니저는 엔티티를 저장하는 가상의 데이터베이스로 생각하면 된다. 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하므로 서로 다른 쓰레드 간에 공유해도 되지만, 엔티티 매니저는 여러 쓰레드가 동시에 접근하면 동시성 문제가 발생하므로 쓰레드 간에 절대 공유하면 안된다. 엔티티 매니저는 데이터베이스 연결이 꼭 필요한 시점까지 커넥션을 얻지 않는다. 영속성 컨텍스트란? "엔티티를 영구 저장하는 환경"persist() 메소드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다.엔티티 생명주기비영속 : 영속성 컨텍스트와 전혀 관계가 없는 상태, 순수한 객체 상태영속 : 영속성 컨텍스트에 저장된 상태, 영속성 컨텍스..
JPA는 특정 DB에 종속적이지 않은 기술이다. 따라서 DB의 교체가 손쉽게 이루어진다.그런데 DB마다 제공하는 SQL 문법과 함수가 조금씩 다른 문제가 있다.1. 데이터 타입가변 문자타입으로 MySQL은 VARCHAR, 오라클은 VARCHAR2를 사용2. 다른 함수명문자열 자르는 함수로 SQL표준은 SUBSTRING()을 사용하지만, 오라클은 SUBSTR()을 사용3. 페이징 처리MySQL은 LIMIT을 사용하지만 오라클은 ROWNUM을 사용 이런 SQL 표준을 지키지 않거나, 특정 DB에만 고유한 기능을 JPA에서는 방언(dialect)이라고 한다.이 문제를 해결하기 위해서 다양한 DB 방언 클래스를 제공한다.특정 DB에 의존적인 SQL은 DB 방언이 처리해준다.따라서 DB가 변경되어도 방언 클래스만..
JPA(Java Persistence API)- 자바 진영의 ORM 기술 표준어.- 애플리케이션과 JDBC 사이에서 동작.- 자바 ORM 기술에 대한 API 표준 명세. ORM(Object-Relational Mapping) : 객체와 관계형 데이터베이스를 매핑한다.객체와 테이블을 매핑해서 패러다임 불일치 문제를 개발자 대신 해결한다. ORM은 SQL을 단순히 개발자 대신 짜주는 것 뿐만 아니라 다양한 패러다임 불일치 문제를 해결하고, 정교한 객체 모델링을 도와준다.ORM프레임워크들은 성숙도에 따라 단순한 CRUD 기능부터 패러다임 불일치 문제 해결까지 해주는 것들도 있다. 그중 자바 진영에서는 하이버네이트 프레임워크가 가장 많이 사용된다. JPA를 통해서 특정 구현 기술에 대한 의존도를 줄일 수 있다...