programing

@CreatedDate 주석은 mysql과 함께 사용할 수 없습니다.

css3 2023. 4. 5. 22:08

@CreatedDate 주석은 mysql과 함께 사용할 수 없습니다.

저는 봄을 처음이라 엔티티에서 @CreatedDate 주석이 어떻게 기능하는지 혼란스럽습니다.

구글 검색을 해봤는데 해결 방법이 많았는데, 하나 빼고는 하나도 효과가 없었어요.왜 헷갈리죠?

이게 내가 처음에 시도했던 거야

@Entity
@EntityListeners(AuditingEntityListener.class)
public class User implements Serializable {

    @Id
    @GeneratedValue
    private Long id;
    private String name;

    @CreatedDate
    private Date created;

    public User(String name) {

        this.name = name;
    }

    public User() {
    }

그것은 효과가 없었다.의 값에 대해 NULL을 취득했습니다.created기둥.

그리고 이렇게 했어요.

@Entity
@EntityListeners(AuditingEntityListener.class)
public class User implements Serializable {

    @Id
    @GeneratedValue
    private Long id;
    private String name;

    @CreatedDate
    private Date created = new Date();

    public User(String name) {

        this.name = name;
    }

    public User() {
    }

이것은 실제로 타임 스탬프를 db에 저장합니다.질문입니다. 제가 따라한 튜토리얼의 대부분은 필요 없습니다.new Date()현재 타임스탬프를 가져옵니다.그게 꼭 필요한 것 같네요.제가 놓친 게 있나요?

저도 이 문제가 있었습니다.당신의 솔루션이 도움이 되었습니다.고맙습니다.그리고 다른 주석을 추가하여 작업을 진행하겠습니다.

먼저 Spring Application Configuration을 입력했는지 확인합니다.

@SpringBootApplication
@EnableJpaAuditing

둘째, 필요한 엔티티에 이 주석을 사용해야 합니다.

  @Entity
  @Table
  @EntityListeners(AuditingEntityListener.class)

@CreatedDate그 자체로는 작동하지 않습니다.@EntityListeners(AuditingEntityListener.class)에 액세스 할 수 있습니다.그러기 위해서는, 설정을 조금 더 실시할 필요가 있습니다.

예를 들어 DB에 있는 이 필드는@CreatedDateString type 이며 현재 로그인한 사용자를 반환한다.@CreatedDate다음 작업을 수행합니다.

public class CustomAuditorAware implements AuditorAware<String> {

    @Override
    public String getCurrentAuditor() {
        String loggedName = SecurityContextHolder.getContext().getAuthentication().getName();
        return loggedName;
    }

}

필요에 맞는 모든 기능을 쓸 수 있지만, 'AuditorAware'를 구현하는 클래스를 참조하는 빈이 있어야 합니다.

두 번째 부분이자 마찬가지로 중요한 것은 다음 항목에 주석을 달아 클래스를 반환하는 빈을 만드는 것입니다.@EnableJpaAuditing, 다음과 같이 합니다.

@Configuration
@EnableJpaAuditing
public class AuditorConfig {

    @Bean
    public CustomAuditorAware auditorProvider(){
        return new CustomAuditorAware();
    }
}

포이즌이 XML 설정일 경우 다음 작업을 수행합니다.

<bean id="customAuditorAware" class="org.moshe.arad.general.CustomAuditorAware" />
    <jpa:auditing auditor-aware-ref="customAuditorAware"/>

@creation을 사용할 수 있습니다.타임스탬프와 @UpdateTimestamp는 다음과 같습니다.

  @CreationTimestamp
  private Instant createdAt;

  @UpdateTimestamp
  private Instant updatedAt;

Java8 타임클래스를 사용하는 경우

@EnableJpaAuditing(dateTimeProviderRef = "auditingDateTimeProvider")
....

@Bean(name = "auditingDateTimeProvider")
public DateTimeProvider dateTimeProvider() {
        return () -> Optional.of(OffsetDateTime.now());
}

JPA Entity 수신기를 사용하지 않으면 JPA가 감사 및 날짜 작성 또는 수정 작업을 수행하므로 날짜 작성은 작동하지 않습니다.

코드를 다음과 같이 수정합니다.

@Entity
@EntityListeners(AuditingEntityListener.class)
class XYZ {

    @Setter(value = AccessLevel.NONE)
    @CreatedDate
    @Column(name = "date_time")
    private Date dateTime;


}

언급URL : https://stackoverflow.com/questions/40370709/createddate-annotation-does-not-work-with-mysql