2014-03-03 9 views
5

Ich verwende Eclipse Link Customizer Änderungen Tabelle zu verfolgen:Nachverfolgen von Änderungen Verwendung von History-Politik in Eclipse Link

@Entity 
@Customizer(org.acme.persistence.HistoryCustomizer.class) 
public class Employee{ 
    @Id 
    private long id; 
    ... 
} 

import org.eclipse.persistence.config.DescriptorCustomizer; 
import org.eclipse.persistence.descriptors.ClassDescriptor; 
import org.eclipse.persistence.descriptors.history.HistoryPolicy; 

public class HistoryCustomizer implements DescriptorCustomizer { 

    public void customize(ClassDescriptor descriptor) { 
     HistoryPolicy policy = new HistoryPolicy(); 
     policy.addHistoryTableName("EMPLOYEE_HIST"); 
     policy.addStartFieldName("START_DATE"); 
     policy.addEndFieldName("END_DATE"); 
     descriptor.setHistoryPolicy(policy); 
} 
} 

Meine Frage: Gibt es eine Möglichkeit, diese Geschichte Tabelle mit JPA zu holen (Link Eclipse) oder i müssen eine virtuelle Entität erstellen, um den Verlauf zu durchsuchen.

Antwort

5

Ja, es gibt:

javax.persistence.Query historyQuery = em 
       .createQuery("SELECT e FROM Employee e", Employee.class) 
       .setParameter("id", id) 
       .setHint(QueryHints.AS_OF, "yyyy/MM/dd HH:mm:ss.SSS") 
       .setHint(QueryHints.READ_ONLY, HintValues.TRUE) 
       .setHint(QueryHints.MAINTAIN_CACHE, HintValues.FALSE); 

Einige Dinge zu kümmern:

  • Das Format des AS_OF Datum ist streng.
  • Sie sollten die Anweisungen READ_ONLY und! MAINTAIN_CACHE nicht entfernen, sonst wird Ihre Persistenzeinheit durcheinander
  • Dies gilt nicht für referenzierte Entitäten, nur für die von der Abfrage zurückgegebenen Entitäten (Mitarbeiter in unserem Fall)! Siehe meine Frage dazu: Eclipselink history of related objects