Back-end/Spring Boot

[Spring DB] BaseEntity

Bay Im 2023. 11. 3. 13:53
  • BaseEntity
    • 모든 엔티티에서 공통으로 있는 객체가 있으면 BaseEntity를 정의해서 활용할 수 있다.
    @Getter
    @MappedSuperclass
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    public class BaseEntity {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)  // Primary key 생성해주는 어노테이션, @Id 선언 후 사용
        private Long id;
    
        public BaseEntity(Long id) {
            super();
            this.id = id;
        }
    
        public boolean isNew() {
            return this.id == null;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
    }
    
  • @MappedSuperclass
    • 객체의 입장에서 공통 매핑 정보가 필요할 때 사용
    • 부모 클래스에 선언하고 상속받아서 사용하고 싶을 때 해당 어노테이션 선언한다.
  • @NoArgsConstructor(access = AccessLevel.PROTECTED)
    • 엔티티는 무조건 해당 NoArgsConstructor을 가져야한다.
    • AccessLevel이 Protected 인 경우는 자식 객체가 부모 생성자를 호출해야하기 때문이다. private 같은 경우 부모 생성자에 접근 불가
  • @Id
    • 해당 엔티티의 Long 타입의 id 필드를 Primary key로 생성 해준다.
  • @GeneraredValue
    • 기본키의 생성 방식을 결정한다.
    • @Id를 선언하고 @GeneraredValue(strategy = GenerationType.IDENTITY) 를 선언해주면 기본키를 자동으로 1씩 증가한다.
    • mysql은 @GeneraredValue(strategy = GenerationType.IDENTITY), oracle은 @GeneraredValue(strategy = GenerationType.SEQUENCE)로 선언해준다. AUTO도 있다.
728x90