0

我创建了一个本机查询

Query q=em.createNativeQuery("select *\n" +
    "from contaarticoli ca,articolo a\n" +
    "where ca.articolo=a.id\n" +
    "order by ca.qta desc\n" +
    "limit 1;");

在工作台中,我创建了一个视图:

create view contaarticoli(articolo,qta)as
(
 select a.idarticolo as articolo,sum(a.quantita) as qta
 from articoliordine a
 group by a.idarticolo
);

当我做:

List<Object> lista=q.getResultList();
System.out.println(lista.get(0))

在输出中我有:[Ljava.lang.Object;@1c5b8a4

为什么?

4

2 回答 2

4

因为你得到一个List<Object[]>. 每个数组都有相同数量的列,对应于查询列。

于 2014-02-20T16:54:16.357 回答
1

始终使用 Query result 和 Object 执行本机查询,直到您在 createNativeQuery 方法中定义了 resultClass 属性。

 createNativeQuery

Query createNativeQuery(java.lang.String sqlString,
                        java.lang.Class resultClass)

    Create an instance of Query for executing a native SQL query.

    Parameters:
        sqlString - a native SQL query string
        resultClass - the class of the resulting instance(s) 

如果您有一个与查询的结果字段同名的实体,请添加 resultClass=Class.class 并会自动创建对象

您是否正在使用 2 个表之间的连接,您可以使用 @SqlResultSetMapping,如下所示。

@SqlResultSetMapping(name="ScalarAndEntities",
    entities={
        @EntityResult(name="org.hibernate.test.annotations.query.Night", fields = {
            @FieldResult(name="id", column="nid"),
            @FieldResult(name="duration", column="night_duration"),
            @FieldResult(name="date", column="night_date"),
            @FieldResult(name="area", column="area_id")
        }),
        @EntityResult(name="org.hibernate.test.annotations.query.Area", fields = {
            @FieldResult(name="id", column="aid"),
            @FieldResult(name="name", column="name")
        })
    },
    columns={
        @ColumnResult(name="durationInSec")
    }
)

Query q = entityManager.createNativeQuery(sqlQuery, "ScalarAndEntities");

在此处阅读有关如何从本地查询中检索实体的更多信息,

于 2014-02-20T16:55:12.973 回答