如何将Hibernate List转换为String?

时间:2015-06-09 14:27:19

标签: java string hibernate list hibernate-criteria

下面的方法打开会话,执行hql并正确返回字符串列表。我想返回一个“String”结果而不是List。

 public List<String> getStates() throws Exception { 
    try 
    {
    Session session = sessionFactory.openSession();
    return session.createQuery("from States").list();
    }
    catch(Exception e)
    {
     //Logging
    }
    finally
    {
        if(session !=null && session.isOpen())
        {
          session.close();
          session=null;
        }
    }
    return null;
    }

这是我到目前为止所看到的但注意到我不能在这里使用toString方法。如何返回字符串而不是字符串列表?

  public String getStates() throws Exception {  
    try 
    Session session = sessionFactory.openSession();
    Query q = session.createQuery("from States");
    List<String> list = (List<String>) q.list();
    return list.toString();

从下面尝试代码后,我得到一个.domain.States不能转换为java.lang.String ClassCastException。所以我改变了我的疑问。当我运行此查询时      (从状态a中选择a.stateName) 我得到州名,但我也想要stateCode。当我运行此查询时      (“从状态a中选择a.stateName,a.stateCode”)我再次获得ClassCastException。

我是否必须迭代这些值?

3 个答案:

答案 0 :(得分:2)

您只需使用String,迭代list个元素,然后将其附加到此String

Session session = sessionFactory.openSession();
Query q = session.createQuery("from States");
List<String> list = (List<String>) q.list();

String listAsString = "";

for (String str : list) {
    listAsString += str + "\n";
}

return listAsString;

您也可以使用StringBuilder作为替代方案。

Java 8解决方案:

在java 8中,您可以使用 StringJoiner Collectors List<String>转换为String

String listAsString = list.stream()
                          .map(Object::toString)
                          .collect(Collectors.joining(", ")); // you can change the delimiter to '\n' here to get new line

编辑:

参考你上一次编辑,你说有一个ClassCastException,因为你从你的查询中获得了一个Object[]数组(名称,代码之和),你想将它存储为String的列表,您应该迭代这些对象并提取数据,您必须像这样更新您的代码

String listAsString = "";
List<Object[]> list = (List<Object[]>) q.list();
Iterator iter = list.iterator();
while(iter.hasNext()) {
     Object[] result = (Object[]) iter.next();
     listAsString += "Name: "+result[0]+" and code: "+result[1]+ "\n";
}
return listAsString;

答案 1 :(得分:1)

StringBuilder sb = new StringBuilder();
for (String s : aisLines)
{
    sb.append(s);
    sb.append("\n"); 
}
String string = sb.toString(); 

答案 2 :(得分:1)

StringBuffer sb = new StringBuffer();
for (String str : list)
{
     sb.append(str);
     sb.append("\n"); // or sb.append(" ");
}
sb.deleteCharAt(sb.length() - 1);
String string = sb.toString();