Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.hibernate.QueryException:无法解析属性:createdDate\u MOD of:org.baeldung.HibernateAuditDemo.model.Order\u AUD_Java_Hibernate Envers - Fatal编程技术网

Java org.hibernate.QueryException:无法解析属性:createdDate\u MOD of:org.baeldung.HibernateAuditDemo.model.Order\u AUD

Java org.hibernate.QueryException:无法解析属性:createdDate\u MOD of:org.baeldung.HibernateAuditDemo.model.Order\u AUD,java,hibernate-envers,Java,Hibernate Envers,我使用hibernate envers进行审计 我有简单的订单实体: @Entity @Table(name = "orders") @Audited public class Order { @Id @GeneratedValue(generator = "increment") @GenericGenerator(name = "increment", strategy = "increment") private Long id; private

我使用hibernate envers进行审计

我有简单的
订单
实体:

@Entity
@Table(name = "orders")
@Audited
public class Order {

    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private Long id;

    private Double price;

    @Temporal(TemporalType.TIMESTAMP)
    private Calendar createdDate;

    public Order() {
    }
    //the rest is unimportant
我使用
AuditorReader
查询属性已更改的修订:

    AuditReader auditReader = AuditReaderFactory.get(entityManager);
            // find revision at which order entity changed its property createdDate
            List revisions = auditReader.createQuery().forRevisionsOfEntity(Order.class, false, true).
            add(AuditEntity.property("createdDate").hasChanged()).getResultList();

            Object[] history = (Object[]) revisions.get(0);
在这段代码中,我得到一个异常:

org.hibernate.QueryException: could not resolve property: createdDate_MOD of: org.baeldung.HibernateAuditDemo.model.Order_AUD [select e__, r from org.baeldung.HibernateAuditDemo.model.Order_AUD e__, org.hibernate.envers.DefaultRevisionEntity r where e__.createdDate_MOD = :_p0 and e__.originalId.REV.id = r.id order by e__.originalId.REV.id asc]
        at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)
        at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77)
        at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1967)
在表
orders
orders\u aud
中的数据库中,我看到了名为
createdDate
的列,但没有
createdDate\u MOD


为什么不能解析属性
createdDate

要告诉hibernate envers跟踪对特定属性的更改,您需要在该属性上设置
@Audited(withModifiedFlag=true)


要为所有实体全局设置它,您需要在hibernate属性中将带有修改标志的
org.hibernate.envers.global\u设置为true。

Volodymir的答案完美地解释了调用
AuditEntity.property(“某些属性”).hasChanged()
方法需要做什么

然而,有些人在不使用
hasChanged
方法时可能会遇到同样的神秘异常-就像我一样。

对于此设置:

@Entity(name = "prnt")
@Audited
public class ParentClass {
    @Id private Long id;
}

@Entity(name = "chld")
@Audited
public class ChildClass {
    @Id private Long id;

    @ManyToOne @JoinColumn(name = "shrt_prnt_id") 
    private ParentClass looongishLinkToParentClass;
}

…人们可能认为这是可行的:

AuditQuery q = ...;
q.add(AuditEntity.property("shrt_prnt_id")).eq(value));
…或者,至少,这是:

q.add(AuditEntity.property("looongishLinkToParentClass")).eq(value));
这两个都不行

这个是:

q.add(AuditEntity.property("looongishLinkToParentClass_id")).eq(value));