@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에 있는 이 필드는@CreatedDate
String 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
'programing' 카테고리의 다른 글
Jest를 사용하여 거절된 약속을 어떻게 테스트합니까? (0) | 2023.04.05 |
---|---|
메뉴에 추가하지 않고 WordPress 관리 페이지를 추가하려면 어떻게 해야 합니까? (0) | 2023.04.05 |
MongoDB에서 컬렉션을 드롭하거나 삭제하려면 어떻게 해야 합니까? (0) | 2023.04.05 |
글로벌하게 정의된 각도JS 컨트롤러 및 캡슐화 (0) | 2023.04.05 |
헤더 정보를 수정할 수 없습니다. 헤더가 이미 전송되었습니다...Word Press 문제 (0) | 2023.04.05 |