아카이브

[스프링 데이터 JPA] JPA 프로그래밍 2. 엔티티 타입 맵핑 본문

Spring/스프링 데이터 JPA

[스프링 데이터 JPA] JPA 프로그래밍 2. 엔티티 타입 맵핑

주멘이 2021. 1. 10. 21:14

@Entity

  • 엔티티는 객체 세상에서 부르는 이름
  • 기본적으로 @Table을 포함하고 있음
  • 보통 클래스와 같은 이름을 사용하기 때문에 값을 변경하지 않음
  • JPQL에서 사용된다.

@Table

  • 릴레이션 세상에서 부르는 이름
  • @Entity의 이름이 기본값
  • SQL에서 쓰인다.

@Id

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

@GeneratedValue

  • 주키의 생성 방법을 맵핑하는 애노테이션
  • 생성 전략과 생성기를 설정할 수 있다

    다른 전략을 임의로 지정할 수 있음 보통은 기본값을 사용

@Column

  • unique: unique 설정 여부 true, false를 줄 수 있음
  • nullable: null 사용여부 true, false를 줄 수 있음
  • length
  • columnDefinition: 반드시 SQL을 사용해 명시해주어야 할 때 설정
  • ...

@Temporal

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

@Transient

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

application.properries

# logger를 사용해서 sql log에 찍히는(?)파라미터들을 보는 방법도 있으니 찾아볼 것
logging.level.org.hibernate.type.descriptor.sql=trace
# hibernate sql log
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

 

Account 도메인 클래스

@Entity(name = "Account") // 테이블 맵핑. name은 table이름
public class Account {  // User는 keyword이므로 되도록 사용하지 말것
    @Id // ID로 쓴다
    @GeneratedValue // 자동생성값, DB마다 생성전략이 다를 수 있
    private Long id;

    @Column(nullable = false, unique = true)// 생략되어있는거랑 마찬가이다. ddl-auto가 update인 경우 Column 속성을 변경하면 이미 만들어져 있기 때문에 오류가 난다. 그래서 보통 개발시 create가 간편하다.
    private String username;

    private String password;

    @Temporal(TemporalType.TIMESTAMP)
    private Date created = new Date();

    private String yes;

    @Transient  // 컬럼으로 맵핑을 안해준다. 순수히 객체로만 사용할때
    private String no;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}