목록JPA (52)
BE전문가 프로젝트
@Entity public class Team { @Id @GeneratedValue @Column(name="TEAM_ID") private Long id; private String name; @OneToMany @JoinColumn(name = "TEAM_ID") private List members = new ArrayList(); //ArrayList로 초기화 하는 것(관례) add시 nullpoint가 안뜬다. } package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import ja..
연관관계 매핑시 고려사항 다중성 단방향, 양방향 연관관계의 주인 다대다(N:N)은 실무에서 절대로 사용하지 않는다 테이블 -외래키 하나로 양쪽 조인 가능 - 사실 방향성이라는 개념이 없다 객체 - 참조용 필드가 있는 쪽으로만 참조 가능 - 한쪽만 참조하면 단방향 - 양쪽이 서로 참조하면 양방향 다대일(N:1) - 항상 N쪽에 외래키(주인)이 있어야 한다. - 가장 많이 사용하는 연관관계의 - 다대일의 반대는 일대다 다대일 단방향 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name="USERNAME") private String username; @ManyToOne @JoinColumn(name="TEAM_ID") ..
양방향 매핑시 가장 많이 하는 실수 연관관계의 주인에 값을 입력하지 않았을 때 나오는 현상이다. 지금 연관관계의 주인은 Member에 있는 team이다. 따라서 값을 넣을 때는 member.setTeam을 해줘야 제대로된 값이 입력되는 것을 확인할 수 있다. package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class JPAMain { public static void main(String[] args) { En..
package hellojpa; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Team { @Id @GeneratedValue @Column(name="TEAM_ID") private Long id; @Column(name="USERNAME") private String name; @OneToMany(mappedBy = "team")//어떤것과 연결되어 있는지(Member에 보면 team(변수명)을 볼 수 있다) private List members = new ArrayList(); //ArrayList로 초기화 하는 것(관례) add시 nullpoint가 안뜬다. } ma..
객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래키를 매핑 용어 이해 용어 설명 방향 단방향, 양방향 다중성 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:N) 연관관계의 주인 객체 양방향 연관관계는 관리 주인이 필요 연관관계가 필요한 이유 객체지향 설계의 목표는 자율적인 객체들의 "협력 공동체" 를 만드는 것이다. 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. 연관관계 설정 전 package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Ent..
요구사항 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다. 지금은 maven이라 실행시 그대로 컬럼을 저장하지만 Spring boot에서 hibernate를 사용하면 스네이크표기법(order_id)으로 컬럼이 추가된다. public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); //트랜잭션 시작 try{ Or..
기본키 매핑과 관련된 Annotation은 @Id, @GeneratedValue 두가지가 있다 설명 직접할당 @Id만 사용 자동할당 @GeneratedValue - IDENTITY : 데이터베이스에 위임, MYSQL - SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE @SequenceGenerator 필요 - TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용 @TableGenerator 필요 - AUTO: 방언에 따라 자동 지정, 기본값 자동할당 IDENTITY 전략 - 특징 기본 키 생성을 데이터베이스에 위임 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용(예: MyySQL의 AUTO_INCREMENT) JPA는 보통 트랜잭션 커밋 시점에 INSER..
예시 요구사항 1. 회원은 일반 회원과 관리자로 구분해야 한다. 2. 회원 가입일과 수정일이 있어야 한다. 3. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다. package hellojpa; import lombok.NoArgsConstructor; import javax.persistence.*; import java.util.Date; @Entity @NoArgsConstructor public class Member { @Id private Long id; @Column(name="name") private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType..