양방향 매핑 Member 엔티티의 양방향 매핑은 단방향과 동일하다. @Entity public class Member{ @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; //... } Team 엔티티는 컬렉션을 추가해야 한다. @Entity public class Team{ @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "team") List members = new Arr..
연관관계의 필요성 '객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.' - 조영호 님의 '객체지향의 사실과 오해' 라는 책에서. [예제] 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. [객체, 테이블 모델링] 연관관계가 없는 객체 [객체를 테이블에 맞춰 모델링 하는 코드] 참조 대신에 외래 키를 그대로 사용한다. @Entity public class Member{ @Id @GeneratedValue private Long id; @Column(name ="USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; // 이하 생략.. } @Entity publi..
기본 키 매핑 기본 키 매핑 어노테이션 @Id @GeneratedValue @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; 기본 키 매핑방법에는 직접 할당 방법과 자동 생성 방법이 있다. 직접 할당 방법은 @Id만 사용하고, 자동 생성 방법은 @GeneratedValue를 사용한다. 옵션은 다음과 같다. 옵션 - IDENTITY 데이터베이스에 위임한다.(MYSQL) 옵션 - SEQUENCE 데이터베이스에 시퀀스 오브젝트를 사용한다.(ORACLE) 해당 옵션을 사용하려면 @SequenceGenerator 가 필요하다. 옵션 - TABLE 키 생성용 테이블을 사용하고, DB에서 사용한다. 해당 옵션을 사용하려면 @TableGenera..
JPA에서 핵심적인 내용은 다음과 같다. 객체와 관계형 데이터베이스 매핑(ORM, Object Relational Mapping) 영속성 컨텍스트 우선, 영속성 컨텍스트에 대해 알아보자. 엔티티 매니저와 팩토리와 엔티티 매니저 먼저, 웹 애플리케이션에서 EntityManagerFactory와 EntityManager의 간단한 동작을 살펴보았다. 클라이언트 요청을 받으면 EntityManagerFactory는 각 클라이언트에게 EntityManager를 부여한다. 각 클라이언트는 부여받은 EntityManager를 가지고 DB에 접근한다. 영속성 컨텍스트 JPA를 이해하는데 가장 핵심적이며, "엔티티를 영구 저장하는 환경"이라는 뜻을 가지고 있다. 실제 코드에서는 EntityManager.persists(..
데이터베이스 방언 JPA는 특정 베이스에 종속하지 않는다. 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다. 가변 문자 MySQL : VARCHAR Oracle : VARCHAR2 문자열 자르는 함수 SQL 표준 : SUBSTRING( ) Oracle : SUBSTR( ) 페이징 MySQL : LIMIT Oracle : ROWNUM 방언은 SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능이다. 각 데이터베이스 방언을 사용하기 위해 hibernate.dialect 속성에 지정한다. H2 : org.hibernate.dialect.H2Dialect Oracle 10g : org.hibernate.diaslect.Oracle10gDialect MySQL : org.hibernate..