我正在尝试从级别(列名称,而不是主键。主键是 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/