🌱 SPRING

    [JPA] 양방향 매핑시 주의점과 연관관계 편의 메서드

    [JPA] 양방향 매핑시 주의점과 연관관계 편의 메서드

    이번 포스팅에서는 양방향 매핑 시 주의해야할 점과 연관관계 편의 메서드 작성 방법에 대해 알아보겠습니다. 아래 이미지와 같이 Member와 Team 엔티티를 양방향 매핑했을 경우를 가정해 설명합니다. 들어가기 전에 위 연관관계에서 연관관계의 주인은 누구일까요? 바로 Member입니다. MEMBER 테이블에서 TEAM_ID라는 외래키를 갖고있기 때문이죠. 그렇다면 Member와 Team 엔티티에서 각각 team, members 변수는 어노테이션을 어떻게 선언해야할까요? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Entity public class Member { ... @ManyToOne @JoinColumn(name = "TEAM_ID") private ..

    [JPA] 연관관계 매핑 기초

    [JPA] 연관관계 매핑 기초

    연관관계가 필요한 이유 아래와 같은 시나리오를 가정해보자. 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일(N:1) 관계다. 이 시나리오대로 테이블을 모델링하면 아래와 같이 모델링이 된다. 그렇다면 이 시나리오를 테이블에 맞춰 Entity객체로 변경하면 어떻게 될까? 보이는 것과 같이, Member 객체에 teamId를 추가해 소속 팀을 입력하고있다. 이렇게 객체가 설계된다면 새 사용자를 만들때 코드는 아래와 같이 외래키를 직접 다루게 된다. 1 2 3 4 5 6 7 8 9 10 11 12 // 새 팀 생성 및 저장 Team team = new Team(); team.setName("팀이름"); entityManager.persist(team); // 새 사용자 생성 및 저..

    [JPA] 기본키 매핑 어노테이션

    [JPA] 기본키 매핑 어노테이션

    기본키 매핑 엔티티 매핑 시 기본키가 되는 컬럼은 @Id 어노테이션을 붙여 지정할 수 있다. 1 2 @Id private Long id; cs 그리고, 이 기본키 컬럼의 값을 JPA에서 자동으로 생성하게 할 수도 있는데, 만약에 기본키 값을 직접 할당할 경우에는 위 코드처럼 @Id 어노테이션만 사용하면 되고 자동 생성하게 할 경우 @GeneratedValue 어노테이션을 붙여주면 된다. @GeneratedValue 1 2 3 @Id @GeneratedValue private Long id; cs @GeneratedValue 어노테이션을 붙이면, DBMS 종류에 따라 맞춰 자동적으로 값을 JPA에서 생성해 입력해준다. 이 어노테이션에는 strategy라는 옵션이 존재해 자동 생성 값을 어떻게 생성할지도 지..

    [JPA] 매핑 어노테이션

    [JPA] 매핑 어노테이션

    엔티티 내 필드에는 아래 매핑 어노테이션을 이용해 매핑 컬럼에 대한 특성을 지정할 수 있다. @Column @Temporal @Enumerated @Lob @Transient @Column name @Column(name = "컬럼명") 필드와 매핑할 테이블의 컬럼명을 지정한다. 기본값 : 필드명 insertable, updatable 필드 값 수정 시 DB에 반영할 지 여부 @Column(updatable = false) 지정 시 해당 필드의 값이 변경되도 UPDATE문에 포함되지 않음 기본값 : true nullable @Column(nullable = false) 기본값 : true DDL 옵션 null 허용 여부를 지정한다. unique @Column(unique = true) 기본값 : fals..

    [JPA] 스키마 자동 생성

    [JPA] 스키마 자동 생성

    JPA에서는 엔티티를 이용해 데이터베이스 스키마를 자동으로 생성해주는 기능을 제공한다. 실제 프로젝트를 수행할 때는 사용하면 안되는 기능이지만, 개인 프로젝트나 학습용으로는 좋은 기능인듯하다. 자동생성 옵션 스키마 자동 생성 옵션은 persistence.xml에서 지정한다. 위 property를 원하는 persistence-unit에 추가해주면 된다. 그리고 value 속성의 값에 따라 동작이 달라지는데, 아래와 같다. create : 기존 테이블을 삭제하고 다시 생성한다. create-drop : create 옵션과 동일하나 애플리케이션 종료 시점에 테이블을 제거한다. update : 변경 내용만을 반영한다. validate : 엔티티와 테이블이 정상적으로 매핑되었는지만 확인한다. none : 사용하지..

    [JPA] 엔티티

    [JPA] 엔티티

    @Entity @Entity 어노테이션이 붙은 클래스는 JPA가 관리하며, 이를 엔티티라고 한다. JPA에서는 이 엔티티를 테이블과 매핑해 SQL문을 작성하며, 옵션을 지정해 생성되지 않은 테이블을 엔티티를 통해 생성할 수도 있다. 주의사항 JPA 기본 스펙으로 인해 엔티티에는 기본 생성자가 필수적으로 필요하다. → JPA를 구현하는 라이브러리에서 객체를 프록싱할 때 필요 final 클래스, enum, inteface, inner 클래스는 사용이 불가능하다. 컬럼에 매핑되어 저장할 필드에는 final 사용이 불가능하다. 주요 속성 name - JPA에서 사용할 엔티티 이름을 지정한다. - 기본값 : 클래스명 그대로 - 같은 클래스 이름이 없으면 가급적 기본값을 사용하도록 하자. @Table @Table ..

반응형