【问题标题】:Hibernate custom class mappingHibernate 自定义类映射
【发布时间】:2017-10-11 18:13:01
【问题描述】:

当我使用此代码获取用户时,它可以正常工作。

 public List<Users> getActiveUsers(User user) {
    EntityManager entityManager = getEntityManager();
   List<User> Users = new ArrayList();
    try {
        users = entityManager.createQuery("select e from User e where  e.deleted = :deleted", User.class)
                .setParameter("deleted", false)                 
                .getResultList();
    } finally {
        entityManager.close();
    }
    return users;
}

但是如果我尝试使用下面的代码只获取一个用户,它会失败。

User user = (User) entityManager.createQuery("select e from User e where  e.deleted = :deleted")
                .setParameter("deleted", false)+                 
                .getSingleResult();

我无法获取映射用户,例外是:“无法将 com.project.model.User 转换为 com.project.model.User”

【问题讨论】:

  • 你可以试试entityManager.createQuery(query, User.class)吗?你在哪里部署这个?
  • 我试过了,结果一样。我在哪里部署?不知道我是否理解,它在 localhost 中,并且在 userRepositoryCustom 类中调用了该方法
  • 您使用的是什么应用服务器,这似乎是与类加载器有关的问题。还可以尝试将“setMaxResults(1)”添加到您的查询中。
  • 我正在使用 Glassfish
  • 可以添加日志吗?

标签: hibernate spring-data-jpa hibernate-mapping hibernate-criteria


【解决方案1】:

你忘了输入类类型User.class

entityManager.createQuery("SELECT u FROM User u where  u.deleted = :deleted", User.class)
             .setParameter("deleted", false).getSingleResult();

你的方法:

 public User getActiveUser(User user) {
    EntityManager entityManager = getEntityManager();      
    try {
        User user = (User) = entityManager.createQuery
                           ("SELECT u FROM User u WHERE u.deleted = :deleted", User.class)
                           .setParameter("deleted", false).getSingleResult();
    } finally {
        entityManager.close();
    }
    return user;
}
  • 看第一个例子,你使用 Users 类和第二个 User(最后没有 S)
  • 您需要小心处理此查询,因为它们可能返回多条记录

【讨论】:

  • 我都试过了,转换(用户)和添加 User.class
  • 我试过了,这是我得到的错误Can not pass an instance of "class com.project.model.User (loaded by instance of sun.misc.Launcher$AppClassLoader(id=8597))" to an instance of "class com.project.model.User (loaded by instance of org.springframework.boot.devtools.restart.classloader.RestartClassLoader(id=12414))"
【解决方案2】:

显然代码没有任何问题。我发现问题和这个人一样:

A classloader proplem related to spring-boot-devtools

但是,带有推土机参考的 .properties 文件对我不起作用。我设法通过从项目中删除 spring-devtools 来启动并运行我的代码。猜猜我可以不用实时重新加载!

【讨论】:

    猜你喜欢
    • 2012-12-23
    • 2016-09-22
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    相关资源
    最近更新 更多