java - 仅当实体确实发生更改并将更新时才设置changedby字段。

标签 java jpa eclipselink glassfish-3

在我的客户实体中,我想保存一个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/

相关文章:

java - 音频暂停时暂停变化的图像

java - 更改Swagger codegen中生成的支持文件的包

Java:为什么我的对象实例有两个serialVersionUID?

java - 如何在 JPA/EclipseLink 中使用 "group by"子句查询 select 中的记录数?

jpa - EclipseLink 在尝试编织类时抛出 ArrayIndexOutOfBoundsException

mysql - 嵌入式类中的 @OneToMany 和 @ManyToMany 如何工作?

java - jetty web.xml 503

java - Java解析conf文件

mysql - 我无法连接 MySQL 数据库 WildFly - Hibernate

java - 如何使用 Spring+JPA 更新来自 Play Framework 2.0 表单的对象?