在查询中使用CURRENT_TIMESTAMP时,使用@UpdateTimestamp不起作用,并且发生错误

问题描述 投票:1回答:1

我正在使用Spring和JPA并构造一个更新查询。它正确更新。但我也想将时间更新为当前时间戳。

最初只是想在timestamp字段上使用@UpdateTimestamp。它不会抛出任何错误。更新发生在其他列上,但时间戳没有变化。

代码如下:

实体

@Getter
@Setter
@Entity
@AllArgsConstructor
@NoArgsConstructor
public class MyEntity {

    @EmbeddedId
    private SomeClass someClass;

    @Column("name") 
    private String name;

    @MapsId("number")
    @ManyToOne(cascade = CascadeType.MERGE)
    @JoinColumn(name = "NUMBER")
    private NumEntity numEntity;

    // this annotation makes no diff and date does not change
    @UpdateTimestamp
    @Column(name = "CREAT_TS")
    private Timestamp createdTimestamp;
}

回购

@Repository
public interface MyRepository extends CrudRepository<MyEntity, SomeClass> {

    @Modifying
    @Query("UPDATE MyEntity e SET e.name =:name WHERE e.someClass.id =:id")
    void updt(@Param("id") int id, @Param("name") String name);
}

进行更新的方法

@Transactional
public void myMethod(int id, String name) {  
    myRepository.updt(id, name);
}

或者,我尝试如下在查询本身中更新时间戳。当我尝试运行myMethod时,这将引发错误。请提出建议,可以使用这两种方案的解决方案。谢谢。

错误

CAUSE = InvalidDataAccessResourceUsageException:命名参数不正确绑定:CURRENT_TIMESTAMP;嵌套异常为org.hibernate.QueryException:命名参数未绑定:CURRENT_TIMESTAMP

使用查询中的当前时间戳回购。

@Repository
public interface MyRepository extends CrudRepository<MyEntity, SomeClass> {

    @Modifying
    @Query("UPDATE MyEntity e SET e.createdTimestamp =:CURRENT_TIMESTAMP, e.name =:name WHERE e.someClass.id =:id")
    void updt(@Param("id") int id, @Param("name") String name);
}
java spring jpa jpql
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.