[Spring]Jpa insert default value

    [Spring] Jpa insert default value 알아보기

    Spring JPA를 사용하면 데이터베이스 테이블에 새로운 레코드를 삽입할 때, 기본값(default value)을 지정할 수 있습니다. 데이터베이스에서 기본값을 지정하면 JPA에서 이를 인식하여 적용할 수 있습니다. 이 글에서는 JPA에서 기본값을 삽입하는 방법을 소개하고, @DynamicInsert, @DynamicUpdate, @PrePersist, @PreUpdate 어노테이션을 활용하여 기본값을 삽입하는 방법을 알아보겠습니다.

    1. columnDefinition

    JPA에서는 엔티티 클래스의 필드에 @Column 어노테이션을 사용하여 데이터베이스 테이블의 컬럼 정보를 설정할 수 있습니다. @Column 어노테이션에는 다양한 속성들이 있으며, 그 중 defaultValue 속성을 사용하여 컬럼의 기본값을 설정할 수 있습니다. 예를 들어, User 엔티티 클래스에서 created_at 컬럼의 기본값을 현재 시간으로 설정해보겠습니다.

    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        
        @Column(nullable = false)
        private String name;
        
        @Column(nullable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
        private LocalDateTime created_at;
        
        // getter, setter, constructor
    }

    위의 예제에서, created_at 필드에 @Column 어노테이션을 추가하고 columnDefinition 속성을 사용하여 컬럼의 기본값을 설정했습니다. columnDefinition 속성은 SQL DDL 문법과 동일합니다. 따라서 위의 예제에서는 TIMESTAMP 형식의 컬럼을 생성하고, DEFAULT CURRENT_TIMESTAMP를 사용하여 기본값을 설정합니다.

    2. @DynamicInsert, @DynamicUpdate 어노테이션 사용하기

    @DynamicInsert, @DynamicUpdate 어노테이션을 사용하면, 엔티티를 저장 또는 업데이트할 때, 기본값이 설정된 컬럼에 대해 INSERT 또는 UPDATE 문을 생성하지 않습니다. 이렇게 하면, 데이터베이스에서 기본값을 설정하도록 하여 JPA에서는 INSERT 또는 UPDATE 문을 생성하지 않아도 됩니다. 예를 들어, User 엔티티 클래스에서 @DynamicInsert, @DynamicUpdate 어노테이션을 사용하여 created_at 컬럼에 대해 INSERT 또는 UPDATE 문을 생성하지 않도록 설정해보겠습니다.

    @Entity
    @DynamicInsert
    @DynamicUpdate
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        
        @Column(nullable = false)
        private String name;
        
        @Column(nullable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
        private LocalDateTime created_at;
        
        //getter, setter, constructor
    }

    위의 예제에서, @DynamicInsert, @DynamicUpdate 어노테이션을 사용하여 created_at 컬럼에 대해 INSERT 또는 UPDATE 문을 생성하지 않도록 설정했습니다. 따라서, 데이터베이스에서 기본값을 설정하도록 하여 JPA에서는 INSERT 또는 UPDATE 문을 생성하지 않습니다.

    3. @PrePersist, @PreUpdate 어노테이션 사용하기

    @PrePersist, @PreUpdate 어노테이션을 사용하면, 엔티티를 저장 또는 업데이트할 때, 자동으로 실행되는 메서드를 정의할 수 있습니다. 이러한 메서드를 사용하여 엔티티를 저장 또는 업데이트하기 전에 특정 필드의 값을 설정할 수 있습니다. 예를 들어, User 엔티티 클래스에서 @PrePersist 어노테이션을 사용하여 created_at 필드의 값을 설정해보겠습니다.

    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        
        @Column(nullable = false)
        private String name;
        
        @Column(nullable = false)
        private LocalDateTime created_at;
        
        // getter, setter, constructor
        
        @PrePersist
        public void setCreatedAt() {
            this.created_at = LocalDateTime.now();
        }
    }

    위의 예제에서, @PrePersist 어노테이션을 사용하여 setCreatedAt 메서드를 정의하고 있습니다. 이 메서드는 User 엔티티 객체가 저장될 때 자동으로 호출되며, created_at 필드의 값을 현재 시간으로 설정합니다.

    4. 총정리

    Spring JPA를 사용하여 데이터베이스 테이블에 새로운 레코드를 삽입할 때, 기본값을 설정하는 방법에 대해 알아보았습니다. @DynamicInsert, @DynamicUpdate, @PrePersist, @PreUpdate 어노테이션을 사용하여 JPA에서 기본값을 삽입하도록 할 수 있습니다. 이러한 방법을 활용하여 빠르고 효율적인 데이터베이스 작업을 수행할 수 있습니다.

    댓글

    Designed by JB FACTORY