在我的客户实体中,我想保存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字段中的更改吗?
答案 0 :(得分:1)
您可以创建一个临时的瞬态字段,无论实体是否更改,您始终将其设置为用户ID:
@Transient
private Long tempUserId;
@Column
private Long changedByUserId;
@PreUpdate
private preUpdate() {
changed = new Date();
changedByUserId = tempUserId;
}
只有在其中一个持久字段真正发生变化时,实体经理才会执行@PreUpdate
。