如何从JPA查询更新MySQL表时间戳?

时间:2018-07-02 07:05:11

标签: java spring hibernate spring-data-jpa

这是我的模特:

@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:在项目licenta上运行(default-cli):运行时发生异常。   null:InvocationTargetException:创建名称为'userController'的bean时出错:   通过字段“ userService”表示不满意的依赖关系;嵌套异常为   org.springframework.beans.factory.BeanCreationException:创建名称为'userService'的bean时出错:   调用init方法失败;嵌套的异常是java.lang.IllegalArgumentException:   验证方法公共抽象无效查询无效com.example.licenta.service.UserService.update(java.lang.String)!   org.hibernate.hql.internal.ast.QuerySyntaxException:用户未映射[更新用户u SET u.created ='0000-00-00 00:00:00'WHERE u.username =:user name]

1 个答案:

答案 0 :(得分:0)

实际的问题似乎是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