仅当实体已真正更改并将更新时,才设置changeby字段。

时间:2012-11-06 21:16:32

标签: java jpa eclipselink glassfish-3

在我的客户实体中,我想保存changedByUserId字段。如果客户的其他任何一个领域真的发生变化,我只想设置此字段。如果我总是设置它,我强制EntityManager更新客户表,因为我设置了changedByUserId字段。

@Entity
@Table....
public class Customer {
    @Id
    private Long cusID;
    @Column
    private String cusNAME;
    @Column
    private Date changed;
    @Column
    private Long changedByUserId;

    @PreUpdate
    private preUpdate() {
        changed = new Date();
        // cannot set changedbyUserId here because no entitymanager 
        // available where i can query the id
    }
}

有人知道如何告诉EntityManager不检查changedByUserID字段中的更改吗?

1 个答案:

答案 0 :(得分:1)

您可以创建一个临时的瞬态字段,无论实体是否更改,您始终将其设置为用户ID:

@Transient
private Long tempUserId;
@Column
private Long changedByUserId;

@PreUpdate
private preUpdate() {
    changed = new Date();
    changedByUserId = tempUserId;
}

只有在其中一个持久字段真正发生变化时,实体经理才会执行@PreUpdate