일대다(1:N) 연관관계란? 일대다(1:N) 연관관계는 하나의 엔티티가 여러 개의 엔티티와 관계를 맺는 구조를 의미한다. 예를 들어 객체 구조에서 Team과 Member가 있을 때, 하나의 Team에는 여러 명의 Member가 속할 수 있고 각 Member는 하나의 Team에만 속하게 된다. 이러한 관계를 데이터베이스 테이블로 설계할 경우, 외래키는 항상 ‘다(N)’에 해당하는 쪽에 위치하게 되므로 Member 테이블에 Team의 기본키를 참조하는 외래키가 포함된다. 이때 일대다 연관관계에서 일 쪽에 외래키를 관리하며 연관관계의 주인이 된다. 예제 아래의 코드는 일대다 관계에서 일 쪽에 단방향 연관관계의 주인이 될 때 주의할 점이다.@Entitypublic class Member { @Id @..
JPA 페이징 처리 JPA는 페이징 처리를 위한 메서드를 제공한다. 이 메서드를 통해 페이지를 위한 쿼리를 자동으로 만들어준다. 아래 예제는 JPQL으로 구현하였다. 페이징 쿼리 메서드setFirstResult(int startPosition): 조회 시작 위치(0부터 시작)setMaxResults(int maxResult): 조회할 데이터 수예제@Entitypublic class PagingMember { @Id @GeneratedValue private Long id; private int age; // getter, setter 생략} // 엔티티 매니저 생략System.out.println("회원 저장");for(int i=1; i result1 = em.createQ..
@Enumerated이란? Java의 ENUM 타입을 DB로 저장할 수 있다. 저장 방법은 두 가지가 있는데, 첫 번째는 ENUM 값의 위치로 저장하는 방법. 두 번째는 ENUM 값을 문자열로 DB에 저장하는 방법이 있다. @Enumerated 사용 시 주의할 점 @Enumerated 사용 시 주의할 점이 있는데 @Enumerated은 기본 값이 EnumType.ORDINAL(ENUM 값의 위치로 저장)이다. 만약 기본 값으로 저장할 때 어떤 문제가 발생하는지 아래 예제를 통해 알아보았다. 문제점 예제@Entitypublic class Member { @Id @GeneratedValue private Long id; @Column(name = "user_name") privat..
벌크 연산이란? 벌크 연산은 쿼리 한 번으로 여러 테이블의 로우를 변경하는 것이다. 즉 대량의 데이터를 수정(update, delete문)과 삭제하는 연산이다. 벌크 연산시 주의할 점? 벌크 연산을 사용할 때는 주의할 점이 있는데 그것은 벌크 연산은 영속성 컨텍스트를 무시하고 DB에 바로 쿼리를 실행하는 것이다. 아래 예제를 통해 무엇이 문제인지 알아보았다. 문제점 예제@Entitypublic class Book { @Id @GeneratedValue private Long id; private String author; private String bookName; // getter, setter 생략} // 엔티티 매니저 생력System.out.println("book ..