티스토리 뷰

스프링, 자바

BaseEntity.java

killog 2020. 10. 3. 19:32
반응형
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


 */
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함