以下查询从 User 实体获取用户名。
String hql = "SELECT userName FROM User WHERE email= :user_email";
Query query = session.createQuery(hql);
query.setParameter("user_email", userSearched );
'query.list()' 返回什么类型?
它会返回列表吗?
实际上,这取决于您使用的查询类型
据我所知,它将返回两种类型的列表
List<bean>
createQuery('from table').list()
返回这个列表,因为你从表中检索所有列记录。Object[]
createQuery('select column1,column2 from table').list()
时,它将返回object[]
,这里的每一列都将被检索为object[0],object[1],...
您的createQuery(hql).list()
遗嘱将返回List
且未输入。来自Java 文档
将查询结果作为列表返回。如果查询包含多个结果前行,则结果将在 Object[] 的实例中返回。
您在查询中指定字段。查询将产生一个 Object[] 列表。
您可以使用 Mapper 将它们映射到对象或通过索引引用它们。
不,它会返回List<Object>
来自文档查询#list
public List list()
throws HibernateException
将查询结果作为列表返回。如果查询包含多个结果前行,则结果将在 Object[] 的实例中返回。
因此,下面的代码将返回对象列表。
String hql = "SELECT userName FROM User WHERE email='" + userSearched + "'";
List<Object> usersList = sess.createQuery(hql).list();
您可以键入 cast 来创建ArrayList<User>
String hql = "FROM User WHERE email='" + userSearched + "'"; //changed the query
ArrayList<User> usersList = (ArrayList<User>) sess.createQuery(hql).list();
不相关的
我建议使用Query#setParameter来设置参数。
String hql = "FROM User WHERE email = :userSearched";
ArrayList<User> usersList = (ArrayList<User>) sess.createQuery(hql).setParameter("userSearched",userSearched).list();
createQuery 将返回 List 接口类型的对象,即仅返回 List。在您的情况下,因为您知道它将是 User 对象的列表,可以显式转换为 List