在使用@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;
}
答案 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();
}
}
正如我所说,这只是我的个人方法。可能有许多其他解决方案可能更清洁或更漂亮。
希望我能够提供帮助!