spring:
datasource:
url: jdbc:h2:tcp://localhost/~/h2db/jpashop
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
# show_sql: true
format_sql: true
logging:
level:
org.hibernate.SQL: debug
# org.hibernate.type: trace
이제 실제로 동작하는지 확인해봅시다.
먼저 회원 엔티티를 하나 만듭니다. Member 클래스를 하나 만듭니다.
package jpabook.jpashop;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
@Getter @Setter //...1
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
실무에서는 가급적 setter 를 사용하지 않습니다.
만약 꼭 변경을 해야한다면 별도의 의미있는 비즈니스 네이밍의 메서드를 사용하는게 좋습니다.
MemberJpaRepository 를 만듭니다.
package study.datajpa.entity;
import lombok.Getter;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
@Getter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
//...1
protected Member() {
}
public Member(String username) {
this.username = username;
}
}
기본 생성자는 protected 여야합니다. private이면 안됩니다.
하이버네이트 등이 프록싱 기술을 써서 객체를 강제로 만들어내야 하는데 private으로 두면 막힐 수 있습니다.
protected를 사용하라고 스펙이 정의 되어있습니다.