출처 : 챗 GPT
Hibernate의 애노테이션으로, 데이터베이스에 INSERT 쿼리를 실행할 때 NULL이 아닌 필드만을 대상으로 하는 동적인 INSERT쿼리를 생성하도록 지시합니다.
기본적으로 Hibernate는 모든 필드를 고려하여 INSERT 쿼리를 생성합니다. 그러나 @DynamicInsert를 사용하면 NULL이 아닌 필드만을 대상으로 하는 효율적인 쿼리를 생성할 수 있습니다. 이는 데이터베이스의 부하를 줄일 수 있고, 성능을 향상시킬 수 있습니다.
Hibernate의 애노테이션으로, 엔티티의 수정이 필요한 필드만 고려하는 동적인 UPDATE 쿼리를 생성하도록 지시합니다. 이는 엔티티를 업데이트할 때 변경된 필드만을 고려하여 쿼리를 생성하므로, 불필요한 컬럼의 업데이트를 피하고 성능을 최적화할 수 있습니다.
@Where 애노테이션은 Hibernate에서 사용되며, 엔티티를 로드할 때 특정 조건을 추가하는 데 사용됩니다. 주로 논리적 삭제(soft delete) 구현에 활용됩니다. @Where 애노테이션을 사용하면 해당 조건이 항상 쿼리에 포함되어 로드되는 데이터에 대한 필터를 자동으로 적용할 수 있습니다.
예를 들어:
위의 예시에서는 YourEntity 클래스에 is_deleted라는 필드가 있고, 해당 필드에 대한 @Where 애노테이션이 설정되어 있습니다. 이 경우 Hibernate는 항상 is_deleted = false 조건을 쿼리에 추가하여 로드되는 엔티티가 삭제되지 않은 경우에 해당하는 데이터만 가져오게 됩니다.
이는 논리적 삭제를 구현할 때 유용하며, 특히 삭제된 데이터를 실제로 삭제하지 않고 유지해야 하는 경우에 사용됩니다.
@Column 애노테이션의 columnDefinition 속성은 엔티티의 특정 필드에 대한 컬럼 정의를 직접 지정하는 데 사용됩니다. 주로 데이터베이스 특정 타입이나 제약 조건을 설정하는 데 활용됩니다.
예를 들어, demical(15,2) NOT NULL COMMENT '집행금액'라는 columnDefinition은 다음과 같이 사용됩니다:
위의 예시에서는 executionAmount 필드에 대해 데이터베이스 컬럼 정의를 직접 설정하고 있습니다. 이는 해당 필드가 decimal 데이터 타입이며 전체 자릿수는 15이고 소수점 이하 자릿수는 2이며, NOT NULL로 설정되어 있고 주석(comment)은 '집행금액'으로 지정되어 있습니다.
이렇게 columnDefinition을 사용하면 데이터베이스에 특정한 제약이나 주석을 부여하거나, 특정한 데이터 타입을 지정할 수 있습니다. 다만, 데이터베이스에 종속적인 부분이기 때문에 여러 데이터베이스를 지원해야 하는 경우에는 주의가 필요합니다.
@DATA
@Enumerated(EnumType.STRING)