【问题标题】:How can I update MySQL table timestamp from JPA query?如何从 JPA 查询更新 MySQL 表时间戳?
【发布时间】:2018-12-10 08:36:54
【问题描述】:

这是我的模型:

@Entity(name = "checkinusers")
public class User {

    @Id
    @JsonIgnore
    @ApiModelProperty(hidden = true)
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", nullable = false, columnDefinition = "INT(1)")
    private long userId;

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

    @Column(name = "password", nullable = false, columnDefinition = "TEXT")
    private String password;

    @Column(name = "salt", nullable = false, columnDefinition = "TEXT")
    private String salt;

    @ApiModelProperty(hidden = true)
    @Column(name = "lastlogin", nullable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
    private Date created;

方法如下:

@Modifying
@Transactional
@Query("UPDATE User u SET  u.created ='0000-00-00 00:00:00' WHERE u.username = :username ")
 void updateLastLogin(@Param("username") String username);

这是我尝试启动 spring 应用程序时遇到的错误

未能执行目标
org.springframework.boot:spring-boot-maven-plugin:1.5.9.RELEASE:run(default-cli) 在项目许可证上:运行时发生异常。 null:InvocationTargetException:创建名为“userController”的 bean 时出错: 通过字段“userService”表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“userService”的bean时出错: 调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException: 查询方法 public abstract void com.example.licenta.service.UserService.update(java.lang.String) 的验证失败! org.hibernate.hql.internal.ast.QuerySyntaxException: 用户未映射 [UPDATE User SET u.created ='0000-00-00 00:00:00' WHERE u.username = :user name]

【问题讨论】:

    标签: java spring hibernate spring-data-jpa


    【解决方案1】:

    实际问题似乎是 JPA 不知道 User 实体:

    org.hibernate.hql.internal.ast.QuerySyntaxException: 用户未映射

    当您在 @Entity 注释中指定专用名称时,您需要在此实体的所有 JPA 查询中使用此名称:

    @Entity(name = "checkinusers")
    

    即查询需要是:

    @Query("UPDATE checkinusers u SET  u.created = '0000-00-00 00:00:00' WHERE u.username = :username ")
    

    详情请见this question

    【讨论】:

    • 感谢您的尝试,但没有解决问题:(.
    • 非常接近正确答案。工作版本是:@Query("UPDATE checkinusers u SET u.created = '0000-00-00 00:00:00' WHERE u.username = :username")
    • 这对我帮助很大。谢谢
    • @cUser {ts '0000-00-00 00:00:00'} 符号不起作用?您能否评论一下 JPA 在使用我提出的查询时报告的错误 - 只是好奇...
    • 鉴于我的版本是 ,这一定是问题所在
    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    相关资源
    最近更新 更多