在我的客户实体中,我想保存一个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字段中的更改吗?
最佳答案
您可以创建一个临时的 transient 字段,无论实体是否更改,您始终将其设置为用户 ID:
@Transient
private Long tempUserId;
@Column
private Long changedByUserId;
@PreUpdate
private preUpdate() {
changed = new Date();
changedByUserId = tempUserId;
}
这是实体管理器仅当持久字段之一真正发生更改时才会执行@PreUpdate
。
关于java - 仅当实体确实发生更改并将更新时才设置changedby字段。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259540/