[SPRING] Spring 데이터 MongoDB Annotation @CreatedDate가 작동하지 않습니다. ID가 수동으로 할당 된 경우
SPRINGSpring 데이터 MongoDB Annotation @CreatedDate가 작동하지 않습니다. ID가 수동으로 할당 된 경우
내 개체에 dateCreated 및 dateUpdated를 저장하기 위해 감사를 사용하려고하지만 ID를 수동으로 설정 했으므로 몇 가지 추가 작업이 있습니다.
DATAMONGO-946에서의 Oliver Gierke의 제안에 뒤이어 나는 그것을 올바르게 구현하는 방법을 찾으려고 노력하고있다.
위의 Jira 작업에서 원래 포스터로, 여기에서 예제를 다운로드했습니다 https://github.com/spring-guides/gs-accessing-data-mongodb.git 그리고 조금 수정 :
package hello;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.domain.Persistable;
import java.util.Date;
public class Customer implements Persistable<String> {
@Id
private String id;
@CreatedDate
private Date createdDate;
@LastModifiedDate
private Date lastModifiedDate;
private String firstName;
private String lastName;
private boolean persisted;
public Customer() {
}
public Customer(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public void setPersisted(boolean persisted) {
this.persisted = persisted;
}
@Override
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public boolean isNew() {
return !persisted;
}
@Override
public String toString() {
return String.format(
"Customer[id=%s, createdDate=%s, lastModifiedDate=%s, firstName='%s', lastName='%s']",
id, createdDate, lastModifiedDate, firstName, lastName);
}
}
과
package hello;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.mongodb.config.EnableMongoAuditing;
@SpringBootApplication
@EnableMongoAuditing
public class Application implements CommandLineRunner {
@Autowired
private CustomerRepository repository;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... args) throws Exception {
repository.deleteAll();
// create a customer
Customer c = new Customer("Alice", "Smith");
c.setId("test_id");
// save a customer
repository.save(c);
// fetch all customers
System.out.println("Customers found with findAll():");
System.out.println("-------------------------------");
for (Customer customer : repository.findAll()) {
System.out.println(customer);
}
System.out.println();
// create another customer with same id
c = new Customer("Bob", "Smith");
c.setId("test_id");
c.setPersisted(true);
repository.save(c);
// fetch all customers
System.out.println("Customers found with findAll():");
System.out.println("-------------------------------");
for (Customer customer : repository.findAll()) {
System.out.println(customer);
}
System.out.println();
}
}
실행 결과는 다음과 같습니다.
Customers found with findAll():
-------------------------------
Customer[id=test_id, createdDate=Wed Feb 24 00:43:47 WITA 2016, lastModifiedDate=Wed Feb 24 00:43:47 WITA 2016, firstName='Alice', lastName='Smith']
Customers found with findAll():
-------------------------------
Customer[id=test_id, createdDate=null, lastModifiedDate=Wed Feb 24 00:43:47 WITA 2016, firstName='Bob', lastName='Smith']
오브젝트의 갱신 후에 createdDate가 null가됩니다.
내가 여기서 무엇을 놓치고 있니? 그리고 Persistable을 올바르게 구현하여 감사 작업을 올바르게 수행하는 방법은 무엇입니까?
해결법
-
==============================
1.코드가 예상대로 작동합니다. Persistable을 구현하면 @CreatedDate 주석이 작동하는 것을 볼 수 있습니다.
코드가 예상대로 작동합니다. Persistable을 구현하면 @CreatedDate 주석이 작동하는 것을 볼 수 있습니다.
object가 이미 데이터베이스에 있고 createdDate = null로 업데이트 했으므로 createdDate가 save의 두 번째 호출에서 null이라는 것을 확인하십시오. @CreatedDate에 대한 설명서에서 볼 수 있듯이 다음과 같습니다.
두 번째 호출에서 createdDate를 null로 덮어 쓰지 않으려면 c = repository.findOne ( "test_id");를 사용하여 데이터베이스에서 고객을 검색해야합니다. 그런 다음 업데이트하십시오.
from https://stackoverflow.com/questions/35584271/spring-data-mongodb-annotation-createddate-isnt-working-when-id-is-assigned-m by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring의 조건부 유효성 검사 (0) | 2019.03.30 |
---|---|
[SPRING] 절대 uri : http://java.sun.com/jsp/jstl/core는 web.xml 또는이 응용 프로그램과 함께 배포 된 jar 파일에서 확인할 수 없습니다. (0) | 2019.03.30 |
[SPRING] 교차 원산지 요청 차단 된 Spring REST 서비스 + AJAX (0) | 2019.03.30 |
[SPRING] Spring websocket이 특정 사용자에게 전송 (0) | 2019.03.30 |
[SPRING] Spring MVC에서 정적 페이지 주소 지정을 처리하는 방법 (0) | 2019.03.30 |