迭代hibernate查询返回的列表对象中的结果

时间:2011-11-15 07:15:31

标签: java hibernate list

我有如下的hibernate查询:

String mySql = "SELECT S.col1, S.col2, T.col3, T.col4, T.col5 
                FROM myTable S, myTable1 T 
                WHERE S.id = :id and S.id = T.id";
Query myQuery = this.em.createQuery(mySql);
myQuery.setParameter("id", "123");
List<Object> result = myQuery.getResultList();

表myTable和myTable1是实体类。

myTO是一个简单的java类,其属性为col1,col2,col3,col4,col5。

上述查询的结果应该映射到myTO的属性。

如何在结果中迭代列?或者我是否错误地检索结果?

2 个答案:

答案 0 :(得分:16)

您似乎正在尝试查询表格列的一部分。为此,您可以在Hibernate documentation中使用此示例:

  

11.4.1.2。返回元组的查询

     

Hibernate查询有时会返回对象的元组。每个元组都以数组形式返回:

Iterator kittensAndMothers = sess.createQuery(
            "select kitten, mother from Cat kitten join kitten.mother mother")
            .list()
            .iterator();

while ( kittensAndMothers.hasNext() ) {
    Object[] tuple = (Object[]) kittensAndMothers.next();
    Cat kitten = (Cat) tuple[0];
    Cat mother = (Cat) tuple[1];
     ....
}

如果您没有问题来检索整个实体(或至少它的第一级简单属性),您可以使用:

List<Cat> cats = session.createQuery(
    "from Cat where cat.name = ?")
    .setString(0, name)
    .list();
for ( Cat cat : cats ) {
    Cat mother = cat.getMother();
    ...
}

答案 1 :(得分:0)

您是否使用myTable的任何映射?如果它映射到类型T,那么你可以使用它:

List<MyType> list = (List<MyType>)myQuery.getResultList();
list.get(0).getProperty1();

例如,当MyTyoe中的字段“property1”映射到col1时。