2015-04-26 16 views
6

Tôi đang cố gắng sử dụng các khả năng kiểm tra của Dữ liệu Mùa xuân (kết hợp với Khởi động Mùa xuân và Phục hồi Dữ liệu Mùa xuân), nhưng các trường kiểm toán không được đặt trên lưu. Tất cả các lưu kết quả trong một ngoại lệ hạn chế từ cố gắng để tiết kiệm một null "Tạo bởi."Làm cách nào để định cấu hình Kiểm tra qua cấu hình Java trong dữ liệu Spring (và phần còn lại của dữ liệu Spring)?

Theo spring data docs, tôi chỉ có thể đặt chú thích kiểm tra thích hợp (@ CreatedDate/etc) trên thực thể của tôi và tạo AuditorAware <> khả dụng cho ngữ cảnh ứng dụng. Tôi biết đậu kiểm tra của tôi đang được tạo ra từ việc thiết lập một điểm ngắt trong trình gỡ rối.

Câu hỏi của tôi là:

1) Có cần thiết cho tôi để tạo ra một AuditingEntityListener, hay tôi nên mong đợi một phải được cung cấp từ việc @EnableJpaAuditing? (không rõ ràng trong tài liệu về cấu hình java)

2) Có cấu hình nào khác trong mã bên dưới mà tôi thiếu để thiết lập kiểm tra tự động không?

3) Tôi đang gọi mã tạo từ POST đến Spring Data Rest, có bất kỳ cảnh báo đặc biệt nào khi sử dụng chức năng kiểm tra này kết hợp với Spring Data Rest không?

@Entity 
public class Tag implements Serializable { 

    // ... other fields omitted... 

    @CreatedDate 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date created = new Date(); 

    @CreatedBy 
    @Basic(optional = false) 
    @Column(name = "CREATED_BY", nullable = false, length = 24) 
    private String createdBy = ""; 

    @LastModifiedDate 
    @Basic(optional = false) 
    @Column(nullable = false) 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date updated = new Date(); 

    @LastModifiedBy 
    @Basic(optional = false) 
    @Column(name = "UPDATED_BY", nullable = false, length = 24) 
    private String updatedBy = ""; 

    // ... getters and setters were generated ... 

Và cấu hình:

@EnableJpaAuditing 
@Configuration 
public class AuditingConfig { 

    @Bean 
    public AuditorAware<String> createAuditorProvider() { 
     return new SecurityAuditor(); 
    } 

    @Bean 
    public AuditingEntityListener createAuditingListener() { 
     return new AuditingEntityListener(); 
    } 

    public static class SecurityAuditor implements AuditorAware<String> { 
     @Override 
     public String getCurrentAuditor() { 
      Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
      String username = auth.getName(); 
      return username; 
     } 
    } 

} 

Bất kỳ giúp đỡ được nhiều đánh giá, cảm ơn!

Trả lời

8

1) Tôi có cần tạo AuditingEntityListener không, hoặc tôi có nên mong đợi một điều được cung cấp từ việc có @EnableJpaAuditing không? (không rõ trong tài liệu về cấu hình java)

Trả lời: Không bạn không cần phải xác định AuditingEntityListener. Thay vào đó, bạn cần chỉ định @EntityListeners(AuditingEntityListener.class) trên lớp miền của mình.

ví dụ:

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

} 

2) Có cấu hình nào khác trong mã bên dưới mà tôi thiếu để thiết lập kiểm tra tự động không?

Trả lời: Các cài đặt cấu hình khác có vẻ ổn.

3) Tôi đang gọi mã tạo từ POST đến Spring Data Rest, có bất kỳ cảnh báo đặc biệt nào khi sử dụng chức năng kiểm tra này kết hợp với Spring Data Rest không?

Trả lời: Tôi nghĩ là không. Hãy thử với thay đổi được đề xuất ở trên. Nó chỉ nên hoạt động.

+1

"chỉ định @EntityListeners (AuditingEntityListener.class) trên lớp miền của bạn" là bước thiếu quan trọng! Điều này không được đề cập trong tài liệu tham khảo, có lẽ nên có một vấn đề jira cho việc này. – Jay

+0

@Jay, nó được đề cập trong tài liệu Tham khảo dữ liệu Spring Jpa. http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.auditing.configuration. Nó chỉ là cấu hình XML chứ không phải trong Java Config. –

+0

Đó là ý của tôi: nó không được đề cập trong cấu hình java. Cám ơn phản hồi của bạn! – Jay

Các vấn đề liên quan