반응형
package com.example.cloningpetclinic.model;
import java.io.Serializable;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass// 공통의 매핑 정보가 필요할때 사용한다. 매핑 정보만 상속받는 superclass
public class BaseEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public boolean isNew() {
return this.id == null;
}
}
/*
1. @MappedSuperclass
* 상속관계 매핑이 아니다.
* @MappedSuperclass 가 선언되어있는 클래스는 엔티티가 아니다. 당연히 테이블과 매핑도 안된다.
* 단순히 부모 클래스를 상속받는 자식 클래스에 매핑 정보만 제공한다.
* 조회, 검색이 불가하다.
* 직접 생성해서 사용할 일 없으므로 추상 클래스로 만드는 것을 권장한다.
* 테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할을 한다.
JPA에서 @Entity 클래스는 @Entity나 @MappedSuperclass로 지정한 클래스만 상속할 수 있다.
--
2. Serializable
자바의 직렬화 잘은 모르겠음.
3. @Id : jpa 기본키
3.1. 기본키 매핑
```
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id
```
3.1.1. 직접 할당
@Id 만 사용
3.1.2. 자동 생성
@Id와 @GeneratedValue를 같이 사용
네 가지 전략이 있다.
IDENTITY:
기본키 생성을 데이터베이스에 위임
@GeneratedValue(strategy = GenerationType.IDENTITY)
id 값을 null로 하면 DB가 알아서 AUTO_INCREMENT 해준다
id 값을 DB에 값이 들어간 이후에 알게됨.
해결? DENTITY 전략에서만 예외적으로 entityManager.persist()가 호출되는 시점에 바로 DB에 INSERT 쿼리를 날린다
단점: 모아서 INSERT 하는 것이 불가능하다
참고 링크 : https://gmlwjd9405.github.io/2019/08/12/primary-key-mapping.html
*/
반응형
'스프링, 자바' 카테고리의 다른 글
스프링 캐쉬 (0) | 2020.10.03 |
---|---|
스프링 캐쉬 사용법 (0) | 2020.10.03 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 50회차 미션 (0) | 2020.09.28 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 49회차 미션 (0) | 2020.09.27 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 48회차 미션 (0) | 2020.09.26 |