【问题标题】:Spring boot JPA @Entity create temporary variableSpring Boot JPA @Entity 创建临时变量
【发布时间】:2019-05-14 15:05:14
【问题描述】:

我在 Spring Boot 中使用 JPA 将信息保存到 DB。我有诸如creationDate 和updationDate 之类的审计信息,我将其保存到数据库中,将诸如creationDate 和updationDate 之类的数据保存在@PrePersist 和@PreUpdate 方法中。我想要这个更新条件所以我添加了布尔标志 boolean auditInformationFlag 但它认为 auditInformationFlag 变量作为数据库列。是否可以在此类中具有瞬态属性

@Entity
@Table(name = "TestDB")
public class TestEntity implements Serializable {
        @Column(name = "creationdate",nullable = false,  insertable = true, updatable = false)
    private Timestamp creationDate;

    @Column(name = "updationdate",nullable = false,  insertable = true, updatable = true)
    private Timestamp modificationDate;

    private boolean auditInformationFlag;


    public boolean isAuditInformationFlag() {
        return auditInformationFlag;
    }

    public void setAuditInformationFlag(boolean auditInformationFlag) {
        this.auditInformationFlag = auditInformationFlag;
    }

    public Timestamp getCreationDate() {
        return creationDate;
    }

    public void setCreationDate(Timestamp creationDate) {
        this.creationDate = creationDate;
    }


    public Timestamp getModificationDate() {
        return modificationDate;
    }

    public void setModificationDate(Timestamp modificationDate) {
        this.modificationDate = modificationDate;
    }

    @PrePersist
    protected void onCreate() {
        if(auditInformationFlag){
            this.setCreationDate(new Timestamp((new Date()).getTime()));
            this.setModificationDate(new Timestamp((new Date()).getTime()));            
        }
    }

    @PreUpdate
    protected void onUpdate() {
        if(auditInformationFlag){
            this.setModificationDate(new Timestamp((new Date()).getTime()));            
        }
    }
 }

【问题讨论】:

  • @Transient注释。
  • 这个瞬态字段是做什么用的?也许使用 Spring Data JPA 和 @EnableJpaAuditing 注释更好?然后你就可以完全摆脱 PreUpdate / PrePersist 方法了。

标签: java spring-boot spring-data-jpa


【解决方案1】:

但它将 auditInformationFlag 变量视为数据库列

因为你需要用Transient注解该字段。@Transient注解用来表示一个字段不被持久化到数据库中。

您可以通过将@Transient 注释放在字段顶部来在实体类中创建瞬态变量,如下所示。

@Transient
private boolean auditInformationFlag ;

【讨论】:

  • 我已经设置了 entityobject.setAuditInformationFlag(true);存储库.保存(实体对象);但在 PrePersist 和 PreUpdate 方法中,我总是将其视为错误
  • 在prepersist和preupdate中我们可以得到瞬态变量的属性值吗
  • 尝试调用getter方法而不是直接访问变量。实体代理类可能存在问题。
  • 我也尝试使用getter方法,但它不起作用
猜你喜欢
  • 2018-05-11
  • 1970-01-01
  • 2019-03-02
  • 2019-09-14
  • 2019-01-25
  • 2018-05-22
  • 2017-08-11
  • 2020-02-08
相关资源
最近更新 更多