Raw JPA 로 개발하기

@OneToMany 할 때 List 보다는 Set 로 하는 것을 추천
Set -> 중복제거 되므로
LinkedHashSet -> 순서 보장 됨

@PersistenceContext 란?
EntityManager를 빈으로 주입할 때 사용하는 어노테이션
EntityManager : entity 관리
영속성 컨텍스트 – 엔티티를 영구히 저장하는 환경

  • User : 유저 정보로 채널과 관계만 양방향이고, 다른 도메인과는 단방향 관계
  • Channel : 대화 채널은 유저와 다대다 관계
  • Thread : 채널내 대화 쓰레드로 Post 와 같이 댓글, 이모지, 멘션과 관계
  • Comment : 쓰레드내 댓글로 쓰레드와 다대일 관계를 가지며 이모지, 멘션과도 관계
  • Emotion : 쓰레드, 댓글내 이모지로 쓰레드, 댓글과 다대다 관계
  • Mention : 쓰레드, 댓글내 멘션으로 쓰레드, 댓글과 다대다 관계

:: 테이블 매핑 기능

  • @Entity

    • 객체 관점에서의 이름
    • 디폴트로 클래스명으로 설정됨
    • 엔티티의 이름은 JQL에서 쓰임
      • JQL : Entity 명으로 쿼리짤때 쓰이는 언어 (ex. JPQL, QueryDsl)
  • @Table

    • RDB 의 테이블 이름
    • @Entity의 이름이 테이블의 기본값
      • @Table(name = "테이블 이름")
    • 테이블의 이름은 SQL에서 쓰임
      • SQL : Table 명으로 쿼리짤때 쓰이는 언어 (ex. JDBC, SQL Mapper)
  • @Id

    • 엔티티의 주키를 맵핑할 때 사용.
    • 자바의 모든 primitive 타입과 그 랩퍼 타입을 사용할 수 있음
      • Date랑 BigDecimal, BigInteger도 사용 가능.
    • 복합키를 만드는 맵핑하는 방법도 있음
  • @GeneratedValue

    • 주키의 생성 방법을 맵핑하는 애노테이션
    • 생성 전략과 생성기를 설정할 수 있음
      • 기본 전략은 AUTO: 사용하는 DB에 따라 적절한 전략 선택
      • TABLE, SEQUENCE, IDENTITY 중 하나.
  • @Column

    • unique
    • nullable : default값은 true이고 false로 설정하면 DDL 생성 시 not null 제약 조건이 붙음
    • length : 길이
    • columnDefinition : 원하는 컬럼 타입으로 데이터 추출이 가능
      • @Column(columnDefinition = "TEXT")
  • @Temporal

    • 현재 JPA 2.1까지는 Date와 Calendar만 지원.
  • @Transient

    • 컬럼으로 맵핑하고 싶지 않은 멤버 변수에 사용.

:: 필드타입 매핑 기능

기본 타입

  • @Column
    • String, Date, Boolean, 과 같은 타입들에 공통으로 사이즈를 제한할 용도로 쓰인다.
    • Class 에 @Entity 가 붙어있으면 자동으로 필드들에 @Column 이 붙음
  • @Enumerated
    • Enum 매핑용도로 쓰이며 실무에서는 @Enumerated(EnumType.*STRING*) 으로 사용권장
    • Default 타입인 ORDINAL 은 0,1,2.. 값으로 들어가기 때문에 추후 순서가 바뀔 가능성있다.
  • Composite Value 타입
    • @Embeddable
    • @Embedded
    • @AttributeOverrides
    • @AttributeOverride
  • Collection Value 타입
    • 기본 타입의 콜렉션
    • 컴포짓 타입의 콜렉션

:: Entity code 정리

  • IntelliJ Live Template 사용
    • Settings > Editor > Live Templates > Template text (아래 내용 추가) > 속성 설정
/**
 * 컬럼 - 연관관계 컬럼을 제외한 컬럼을 정의합니다.
 */
 

/**
 * 생성자 - 약속된 형태로만 생성가능하도록 합니다.
 */
 

/**
 * 연관관계 - Foreign Key 값을 따로 컬럼으로 정의하지 않고 연관 관계로 정의합니다.
 */
 
 
/**
 * 연관관계 편의 메소드 - 반대쪽에는 연관관계 편의 메소드가 없도록 주의합니다.
 */
 

/**
 * 서비스 메소드 - 외부에서 엔티티를 수정할 메소드를 정의합니다. (단일 책임을 가지도록 주의합니다.)
 */

GitHub 실습코드

0개의 댓글

Powered by GraphCDN, the GraphQL CDN