我有一个带有字段updatedUser
的实体,可以跟踪更新行值的用户。
创建实体时,此字段为空,但应在对实体进行更改并使用merge
时设置该字段。
是否有某种方式,通过java,只有在实体更新后才填充此值? IE:如果是从db创建或检索它,则不应更改。
@Entity
@Table(name="employees", uniqueConstraints= {
@UniqueConstraint(columnNames="idEmployees"),
@UniqueConstraint(columnNames="idCardNumber"),
@UniqueConstraint(columnNames="niNumber")
})
public class Employee {
@Id
@GeneratedValue
@Column(unique=true, nullable=false, updatable=false)
private int idEmployees;
//other class variables
@ManyToOne(cascade=CascadeType.PERSIST, fetch=FetchType.LAZY)
@JoinColumn(name="updatedEmployeeId")
private Employee updatedEmployee;
//constructors, getters and setters
}
答案 0 :(得分:1)
使用javax.persistence.PreUpdate批注可以更新值。但是没有办法注入当前用户。也许可以从ThreadLocal读取用户然后设置用户,但这不是一个非常干净的解决方案,因为它必须在输入您的业务代码之前设置..