2014-11-04 13 views
10

Tôi hiện đang sử dụng dữ liệu Spring mongodb 1.6.0-RELEASE và tôi biết nó có tính năng kiểm tra. Tôi đặt chú thích @EnableMongoAuditing lên trên lớp cấu hình của tôi. Và đậu của tôi là dưới đây:Kiểm tra mongodb dữ liệu xuân không hoạt động .. (Cấu hình Java)

@Document 
public class MyBean{ 

@Id 
private AnotherCustomBean anotherCustomBean = new AnotherCustomBean(); 

@CreatedDate 
private Date creationDate; 

@LastModifiedDate 
private Date lastModifiedDate; 

. 
. 
. 

Khi tôi lưu bean này với mongoTemplate.save(myBean); nó không đặt ngày tạo và ngày sửa đổi cuối cùng ... Và nó không có lỗi.

Bất kỳ trợ giúp nào sẽ được đánh giá cao,

Cảm ơn.

+0

Tôi nghĩ bạn nên thêm thuộc tính này vào bean của bạn vì vậy chúng tôi cần phải thông báo cho ** Spring ** là thuộc tính lưu hiện tại. @ CreatedBy Private String createdBy; Một ý tưởng khác, các chú thích có thể được áp dụng có chọn lọc, tùy thuộc vào thông tin bạn muốn nắm bắt. Đối với các chú thích chụp các điểm trong thời gian có thể được sử dụng trên các thuộc tính của kiểu JodaTimes DateTime, Ngày và Lịch Java kế thừa, các kiểu ngày/giờ JDK8 cũng như dài/dài –

+0

Chú thích thực sự @CreatedBy không bắt buộc, cũng là thời gian joda classpath đã như vậy nên không có vấn đề gì. –

Trả lời

5

Vấn đề thực tế là @Id chú thích. Để sử dụng kiểm toán xuân đúng cách, bạn phải xác định một ObjectId (null cho các đối tượng lưu mới), đó là cách mùa xuân quyết định @LastModifiedDate@CreatedDate

Sau đó, tôi tìm thấy một cách để làm cho nó có thể đậu sử dụng tùy chỉnh trên @Id bằng cách thực hiện Auditable<String,String>

Nhờ @Felby:

tôi thấy rằng lĩnh vực @ id cần thiết để được null tại thời điểm tiết kiệm() chỉ cho @CreatedDate và chú thích @CreatedBy. Các trường @LastModifiedDate và @LastModifiedBy hoạt động bất kể cho dù trường @Id đã được khởi tạo hay chưa.

+3

Tôi thấy rằng trường '@ Id' cần phải là' null' tại thời điểm 'save()' chỉ cho các chú thích '@ CreatedDate' và' @ CreatedBy'. Các trường '@ LastModifiedDate' và' @ LastModifiedBy' hoạt động bất kể trường '@ Id' đã được khởi tạo hay chưa. – Felby

0

Tôi không biết chính xác, nhưng cố gắng thêm Joda thời gian để CLASSPATH để sử dụng chú thích kiểm toán ngày liên quan đến

<dependency> 
    <groupId>joda-time</groupId> 
    <artifactId>joda-time</artifactId> 
    <version>2.2</version> 
</dependency> 
Các vấn đề liên quan