Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate appropriate constructor on class

hk 学习笔记


Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate appropriate constructor on class []

如果出现以上的异常有两种原因:

1. 你应该是写以下的代码,例子:


    @Query(value = "select new UserDto(u.id,u.username) from User u where u.id = :id")
    UserDto findUserDtoById(@Param("id") Long id);

这个时候就会出现上面所说的异常,解决方法:

    @Query(value = "select new com.mkfree.xxx.xxx.UserDto(u.id,u.username) from User u where u.id = :id")
    UserDto findUserDtoById(@Param("id") Long id);

看到com.mkfree.xxx.xxx.UserDto吗?其实是需要添加包名,不然hibernate 不能找到对应的路径


2.就是构造方法的类型问题,例子:

当User 对象里的ID是String 类型,而 UserDto 对象里的ID 是long 类型,方正就是不同类型咯,就会出现以上的错误。所以User 、UserDto的对应的属性类型一定要相同