2014-03-03 132 views
5

我使用Eclipse的链接定制跟踪变化表:跟踪变化日食链接使用历史策略

@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); 
} 
} 

我的问题:有没有办法使用JPA(日食链接)或我去取这个历史表必须创建一个虚拟实体才能搜索历史记录。

回答

5

是的,有:

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); 

有些事情要照顾:

  • 的AS_OF日期的格式是严格的。
  • 你不应该删除READ_ONLY和!MAINTAIN_CACHE指令,否则会弄乱你的持久单元
  • 这并不适用于引用的实体,只给一个由查询(员工在我们的例子)回来了!看到我的问题:Eclipselink history of related objects