在Query注释中更新Timestamp字段Spring JPA

时间:2018-04-13 17:30:06

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

在使用@Query注释时,如何在更新冻结状态时将FROZEN_DATE设置为当前时间。 如果我更新冻结frozen_state以外的字段将不会更新。

@Repository
public interface UserEntryRepository extends CrudRepository <UserEntry, String> {

   UserEntry findByUsername(String username);

   @Transactional
   @Modifying
   @Query("UPDATE UserEntry o SET o.frozen = 1 WHERE o.username = :username")
   int setFrozenForOfuser(@Param("username") String username);

}

实体

@Entity
@Table(name = "OFUSER", schema = "TIMS")
public class UserEntry implements Serializable {

   private static final long serialVersionUID = 546720609517412501L;

   @Id
   @Column(name = "USERNAME", nullable = false)
   private String username;

   @Column(name = "FROZEN")
   private Integer frozen;

   @Column(name = "FROZEN_DATE")
   private Date frozendate;


}

2 个答案:

答案 0 :(得分:1)

您可以像这样使用CURRENT_DATE

UPDATE UserEntry o SET o.frozen = 1, o.frozen = CURRENT_DATE WHERE o.username = :username

答案 1 :(得分:0)

这只是一个建议,因为可能没有“最佳”解决方案。我个人会引入一个boolean dirtyFrozen标志,每当true属性更新时,该标志都会设置为frozen。这可以在void setFrozen(boolean frozen)方法中实现。

然后,您可以将以下内容介绍到您的实体中,该实体将在每次数据库更新之前调用:

@PreUpdate
private void onUpdate() {
    if (this.dirtyFrozen) {
        this.frozen = now();
    }
}

正如我所说,这只是我的个人方法。可能有许多其他解决方案可能更清洁或更漂亮。

希望我能够提供帮助!