3

以下查询从 User 实体获取用户名。

String hql = "SELECT userName FROM User WHERE email= :user_email";
Query query = session.createQuery(hql);
query.setParameter("user_email", userSearched );

'query.list()' 返回什么类型?

它会返回列表吗?

4

5 回答 5

2

实际上,这取决于您使用的查询类型

据我所知,它将返回两种类型的列表

  1. List<bean>

    • 包含一个表的全部数据记录,当你使用like时createQuery('from table').list()返回这个列表,因为你从表中检索所有列记录。
  2. Object[]

    • 当您指定一个或多个特定的列名createQuery('select column1,column2 from table').list()时,它将返回object[],这里的每一列都将被检索为object[0],object[1],...
于 2013-11-06T11:48:55.010 回答
2

您的createQuery(hql).list()遗嘱将返回List且未输入。来自Java 文档

将查询结果作为列表返回。如果查询包含多个结果前行,则结果将在 Object[] 的实例中返回。

于 2013-11-06T11:04:28.277 回答
1

您在查询中指定字段。查询将产生一个 Object[] 列表。

您可以使用 Mapper 将它们映射到对象或通过索引引用它们。

于 2013-11-06T11:05:31.900 回答
0

不,它会返回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(); 
于 2013-11-06T11:05:08.123 回答
0

createQuery 将返回 List 接口类型的对象,即仅返回 List。在您的情况下,因为您知道它将是 User 对象的列表,可以显式转换为 List

于 2013-11-06T11:08:16.467 回答