无法使用@UpdateTimestamp批注更新时间戳

时间:2019-04-30 22:38:53

标签: java hibernate spring-boot jpa

@UpdateTimestamp
    @Column(name="UPDATE_TIME_STAMP")
    private LocalDateTime updateTimeStamp;

@CreationTimestamp
    @Column(name="POLICY_ISSUE_DATE")
    private LocalDateTime policyIssueDate;

您好,我是休眠的新手。我的实体和数据库中都有上述字段。但是,对于我从SpringBoot控制器访问它的Dao方法,当使用bellow方法执行查询更新时,它不会更新数据库中的UPDATE_TIME_STAMP字段。

@Override
    public int updatePolicyStatus(String status,int policyNumber) {
        Query query = entityManager.createQuery("UPDATE Policy p SET POLICY_STATUS=:status where POLICY_NUMBER=:policyNumber");
        query.setParameter("status",status);
        query.setParameter("policyNumber", policyNumber);
        return query.executeUpdate();
    }

另外,如果我尝试合并实体,则它尝试使用NULL更新creationTimeStamp,由于我在数据库中将POLICY_ISSUE_DATE保持为NOT NULL,因此最终失败了。

@Override
    public void updatePolicy(Policy policy) {
        entityManager.merge(policy);

    }

所以我如何在使用merge(policy)时避免creationTimeStamp的NULL值,以及为什么它的updateTimeStamp不使用executeUpdate()更新。

2 个答案:

答案 0 :(得分:0)

您需要在模型/实体类中添加以下所示的注释。能否请您检查一下,并让我知道它是否对您有用。在我的应用程序中,我已经使用了几次,它就像黄油一样希望它也对您有用。

@UpdateTimestamp
@Column(name = "data_update_time")
@Temporal(TemporalType.TIMESTAMP)
private Date dataUpdateTime;

答案 1 :(得分:0)

@sai,您可以将 @Column(updatable = false)添加到policyIssueDate。因此,更新行时不会将其更新为null。