JPA,在UPDATE / merge上使用java更改字段值

时间:2014-09-15 20:55:51

标签: java jpa

我有一个带有字段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
}

1 个答案:

答案 0 :(得分:1)

使用javax.persistence.PreUpdate批注可以更新值。但是没有办法注入当前用户。也许可以从ThreadLocal读取用户然后设置用户,但这不是一个非常干净的解决方案,因为它必须在输入您的业务代码之前设置..