1

在我的客户实体中,我想保存一个 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 字段中的更改吗?

4

1 回答 1

1

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

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

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

这是实体管理器@PreUpdate仅在持久字段之一真正更改时才会执行。

于 2012-11-06T21:24:08.740 回答