Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypedQuery结果使用Hibernate和PlayFramework不兼容_Hibernate_Jpa_Playframework 2.0 - Fatal编程技术网

TypedQuery结果使用Hibernate和PlayFramework不兼容

TypedQuery结果使用Hibernate和PlayFramework不兼容,hibernate,jpa,playframework-2.0,Hibernate,Jpa,Playframework 2.0,调用此简单方法时,我遇到了这个问题,该方法允许我通过用户名获取用户: @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long id; @Constraints.Required public String username; @Constraints.Required public String passw

调用此简单方法时,我遇到了这个问题,该方法允许我通过用户名获取用户:

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long id;

    @Constraints.Required
    public String username;


    @Constraints.Required
    public String password;


    public boolean isAdmin;

    public static User findById(Long id) {
        return JPA.em().find(User.class, id);
    }

    public void update(Long id) {
        this.id = id;
        JPA.em().merge(this);
    }

    public void save() {
        JPA.em().persist(this);
    }

    public void delete() {
        JPA.em().remove(this);
    }


    public static User findByUsername(String username) {
        Query query = JPA.em().createQuery("select u from User u where username = :username", User.class);
        query.setParameter("username", username);
        return (User) query.getSingleResult();
    }

}
错误出现在查询创建时,它是:

[IllegalArgumentException: Type specified for TypedQuery [models.User] is incompatible with query return type [interface java.util.Map]]

我正在使用Hibernate和PlayFramework,有人知道如何解决这个问题吗?

你的选择毫无意义。您不能从用户u中选择u。您必须指定一个或多个列,如

select u.password from User u where u.username = :username
-您将返回哪个字符串-

或者你去拿完整的记录

from User u where u.username = :username

返回用户实例(此处不需要
select
关键字)

问题在于Play的开发模式。如果将代码与
start
命令一起使用,而不是与
run
命令一起使用,您会发现代码是有效的

我假设这与类的重新加载有关。启动Hibernate时,您正在使用的类的(版本)不存在。当Hibernate找不到查询返回的类型时,它会返回到
Map
。然后,当它将它与你的类参数进行比较时,它会发现有错误并抱怨


除了不使用类型化查询之外,我没有找到解决这个问题的方法,这一点都不有趣:-(

是的,我的查询不正确,但这是因为我在尝试解决问题时更改了它。我尝试了你的查询,但我得到了相同的错误。嘿,对不起,问题是Java中定义的实体与数据库不一致。这个答案是有效的。我观察到重新启动服务器解决了问题。问题是Java中定义的实体与数据库不一致。因此,play尝试将查询结果与实体合并时失败。