为什么打印[[Ljava.lang.Object; @ 12f29d9,[Ljava.lang.Object; @ 1648f32]

时间:2014-03-26 21:39:31

标签: java sql hibernate list object

我有一个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。如前??代码是什么?

请帮助。

抱歉我的英语不好。 :)

3 个答案:

答案 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,perolaso​​lució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));