2011-01-28 24 views
6

Tôi đã tự hỏi có cách nào dễ dàng để thực hiện theo dõi các thay đổi trong các thực thể không? Có Envers từ Hibernate để có một kiểm toán, nhưng theo như tôi hiểu nó theo định hướng Hibernate. Tôi đang suy nghĩ nếu có cái gì đó bên trong JPA, hoặc một giải pháp mà không nhận được bên ngoài của spec. Nếu không có bất kỳ, ai đó có thể ném cho tôi một ý tưởng làm thế nào để bắt đầu với loại điều này. Một ý tưởng đến với tôi là tạo một thực thể ví dụ:JPA: Ý tưởng để theo dõi sự tiến hóa/thay đổi của các thực thể

class Change { 
    String className; 
    long id; 
    String fieldName; 
    String fieldValue; 
    Date dateOfChange; 
} 

Điều gì sẽ chứa các đặc tính đã thay đổi. Giải pháp này có vẻ khá hiệu quả về mặt lưu trữ, nhưng nó có thể khó khăn hơn trong việc xử lý các mối quan hệ giữa các thực thể được theo dõi (không tìm ra được).

Tôi đánh giá rất cao bất kỳ đầu vào trong chủ đề này,

Trân trọng! P.

+0

Tôi không nghĩ như vậy trong JPA 1.0. Có lẽ trong JPA 2.0? – Kartoch

+0

JPA2 không chạm vào những thứ như vậy. Nó được liệt kê trên JPA2.1 mục có thể (trở lại trong 2 năm) – DataNucleus

Trả lời

4

Bạn có thể sử dụng @PrePersist Annotation để tạo ra một Entry và lưu trữ nó vào cơ sở dữ liệu.

class Entity{ 

    @PrePersist 
    public void logChanges(){ 
     Change c = new Change() 
     c.setEverythingXouLikeToLog(); 

     entityManager.persist(c); 
     // don't forget ExceptionHandling 
    } 

} 
+0

Đây là cách tiếp cận tôi đang xem xét, ngay cả khi tôi không thích người quản lý thực thể bên trong thực thể. Nhược điểm của giải pháp này là nó có thể khá phức tạp để lấy trạng thái từ một ngày nhất định. – redbull

+0

Tôi nghĩ rằng tôi sẽ đi theo cách này, vì vậy cảm ơn bạn đã dành thời gian và lời khuyên của bạn, chào mừng! – redbull

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