我有一个HIBERNATE DAOImpl用这个方法:
public List<Estados> listaEstados() throws DAOException {
List<Estados> lista = getHibernateTemplate().find("SELECT e.id as id,e.nombre as nombre FROM Estados e");
return lista;
}
运行时,不是绘制id和状态名称,而是显示以下内容:
[[Ljava.lang.Object;@acacc3, [Ljava.lang.Object;@825032]
并且应该画出这样的东西:
[[1,"Morelos"],[2,"Mexico"]
为什么呢?我做错了什么?
问题是,当我检查2个或更多字段时,如果只获得状态名称运行良好。
我用Junit做了一个测试。在显示行之前:
[[Ljava.lang.Object;@acacc3, [Ljava.lang.Object;@825032]
如果它显示我的结果
8585 [main] DEBUG org.hibernate.loader.Loader - result row:
8585 [main] DEBUG org.hibernate.type.IntegerType - returning '1' as column: col_0_0_
8585 [main] DEBUG org.hibernate.type.StringType - returning 'Morelos' as column: col_1_0_
8585 [main] DEBUG org.hibernate.loader.Loader - result set row: 1
8585 [main] DEBUG org.hibernate.loader.Loader - result row:
8585 [main] DEBUG org.hibernate.type.IntegerType - returning '2' as column: col_0_0_
8585 [main] DEBUG org.hibernate.type.StringType - returning 'Mexico' as column: col_1_0_
8585 [main] DEBUG org.hibernate.loader.Loader - done processing result set (2 rows)
任何人都知道我做错了什么,因为正确的结果会丢失?你输了哪里?或者如果我必须将其转换为String对象或List。如前??代码是什么?
请帮助。
抱歉我的英语不好。 :)
答案 0 :(得分:4)
覆盖toString()
中的Estados
方法以返回您想要查看的漂亮String
,如果您尝试直接或间接打印数组,则需要使用Arrays.toString()
以及
答案 1 :(得分:3)
将列表声明为List<Estados> lista
使得它似乎在运行时将成为Estados
的列表,但事实并非如此。
由于您编写查询的方式,实际上您获得了一个数组列表。因此,您需要遍历列表lista
并将列表中的每个项目传递给Arrays.toString()
方法。
或者,这可能不是您想要的,请将您的查询更改为SELECT e FROM Estados e
,在这种情况下,find
方法实际上会返回Estados
的列表,并覆盖toString
中的Estados
。
答案 2 :(得分:0)
Ambas respuestas tuvieron algoderazón,perolasoluciónlaobtuve asiendo lo siguiente:
1.- agregar esta propiedad al bean de SessionFactory hibernate en mi dataSource.xml
<beans:property name="configurationClass">
<beans:value>org.hibernate.cfg.AnnotationConfiguration</beans:value>
</beans:property>
2.- Remplazar la plantilla de hibernate por un hilo de sessionFactory asignado a un Objeto de consulta:
Query queryObject = sessionFactory.getCurrentSession().createQuery("SELECT e.id as id,e.nombre as nombre FROM Estados e".toString());
3.- Y transformar el resultado del query con la siguiente linea(Presentada por un colega del Instituto)esto lo tranforma en formato JSON a partir del toString()que esta en Estados.class:
queryObject.setResultTransformer(Transformers.aliasToBean(Estados.class));