mysql - Hibernate:通过工资(非主要)查询获取实体

标签 mysql hibernate spring-mvc hibernate-mapping spring-jdbc

我正在尝试从级别(列名称,而不是主键。主键是 userId)获取名称(列名称)值列表。但没有取得成功。 请帮帮我。 提前致谢。 我的代码如下。

我的 DaoImpl 方法是:

public List<User> getRepresenatativeNameByRepresenatativeLevel(String selectedLevel) {
        System.out.println("In getRepresenatativeNameByRepresenatativeLevel");

        List<User> userListOfRepresentativeName = new ArrayList<User>();
        User user2 = new User();
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        try {
            Query query = session.createSQLQuery("Select name from user where level = :level1").addEntity(User.class);
            query.setParameter("level1", selectedLevel);
            List<User> results = query.list();
            System.out.println(results.size());
            if (results.size() > 0) {
                for (Iterator<User> iterator = results.iterator(); iterator.hasNext();) {
                    user2 = (User) iterator.next();
                    System.out.println("Emp id: " + user2.getName());
                    userListOfRepresentativeName.add(user2);
                }
                System.out.println(userListOfRepresentativeName.size());
                return userListOfRepresentativeName;
            } else {
                return null;
            }
        } catch (Exception ex) {
            System.out.println("Error in getRepresenatativeNameByRepresenatativeLevel Dao. " + ex);
        }
        return userListOfRepresentativeName;
    }

我的 Controller 是:

@RequestMapping("/showRepresentative")
    public String showRepresentative(HttpServletRequest request, HttpServletResponse response, User user, Model model,
            String selectedValue) {
        System.out.println("In showRepresentative");
        System.out.println("selectedValue: " + selectedValue);
        List<User> userListOfRepresentativeName = userDao.getRepresenatativeNameByRepresenatativeLevel(selectedValue);
        model.addAttribute("userListOfRepresentativeName", userListOfRepresentativeName);
        return "userListOfRepresentativeName";
    }

我在控制台中收到错误:

Hibernate: Select name from user where level = 'Sales Representative'
Dec 08, 2015 5:00:14 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 0, SQLState: S0022
Dec 08, 2015 5:00:14 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Column 'userId' not found.
Error in getRepresenatativeNameByRepresenatativeLevel Dao. org.hibernate.exception.SQLGrammarException: could not execute query

最佳答案

 Query query = session.createSQLQuery("Select name from user where level = :level1");
query.setParameter("level1", selectedLevel);
List<Object> results = query.list();

此处不进行 addEntity 调用。只需按照上面的说明执行查询即可。另请注意,它会给您一个对象列表,而不是您的自定义类。然后,您可以将其包装在您的自定义对象周围或根据您的要求进行修改。

关于mysql - Hibernate:通过工资(非主要)查询获取实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34154869/

相关文章:

java - Spring - 在不使用 Autowiring 的情况下在 xml-config 中注入(inject) JpaRepository

java - 我的 Spring Security 应用程序不会超出登录页面

hibernate - 使用扩展持久性上下文将@Stateless Ejb 注入(inject)@Stateful

java - "Could not write JSON: failed to lazily initialize a collection of role"带 springboot 和 hibernate 搜索

spring-mvc - Web 流添加模型属性以与表单值绑定(bind)

java - 关于解析多个Spring View Resolver的一些问题

android - 将 android 应用程序连接到 Activity 的 mysql 数据库

php - 将两个查询合并为一个

mysql - 为什么 "group by"不适用于 MySQL 查询?

php - 有哪些更有效的方法来处理查询?