
연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 : 다대일(@ManyToOne), 일대다(@OneToMany), 일대일(@OneToOne), 다대다(@ManyToMany) 단방향, 양방향 : 테이블은 외래 키 하나로 양쪽 조인이 가능하다. 사실상 방향이라는 개념이 없다. 하지만 객체는 필드가 있는 쪽으로만 참조가 가능하다. 한쪽만 참조하면 단방향관계, 양쪽이 서로 참조하면 양방향관계이다. 연관관계의 주인 : 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 따라서 테이블의 연관관계를 관리하는 포인트는 외래 키 하나이다. 하지만 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데이다. 따라서 둘중 테이블의 외래 키를 관리할 연관관계의 주인을 지정해야한다. 보통 ..

양방향 연관관계와 연관관계의 주인 Member, TeamClass @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; ... } @Entity public class Team { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "team") List members = new ArrayList(); ... } 일대다 관계를 매..

객체를 테이블에 맞추어 모델링(참조 대신 외래 키 사용) Member, Team Class @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; ... } @Entity public class Team { @Id @GeneratedValue private Long id; private String name; ... } 팀과 회원을 저장 //팀 저장 Team team = new Team(); team.setName("TeamA"); em.persist(team); //회원 ..

기본 키 매핑 직접 할당: @Id만 사용 자동 생성(@GeneratedValue) IDENTITY: 데이터베이스에 위임, MYSQL SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE, @SequenceGenerator 필요 TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용, @TableGenerator 필요 AUTO: 방언에 따라 자동 지정, 기본값 IDENTITY 전략 기본 키 생성을 데이터베이스에 위임 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용한다 (ex: MySQL의 AUTO_INCREMENT) JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행 AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을..

엔티티 매핑 객체와 테이블 매핑: @Entity, @Table 필드와 컬럼 매핑: @Column 기본 키 매핑: @Id 연관관계 매핑: @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 @Entity가 붙은 클래스는 JPA가 관리하고 엔티티라 한다 주의 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 불가 저장할 필드에 final 사용 불가 @Entity 속성 정리 속성 기능 기본값 name JPA에서 사용할 엔티티 이름을 지정 클래스 이름을 그대로 사용(기본값 사용을 권장) @Table @Table은 엔티티와 매..