JPQL多选

时间:2013-04-24 08:30:09

标签: hibernate jpa jpql

我想从TypeCmplt中提取所有数据,如下所示:

    public List<TypeCmplt> listerrTypeCmplt()
throws DaoException {
    Query query = cmpltTitreEM.createQuery("select t.cdTypeCmplt, t.lbTypeCmplt from TypeCmplt t");
    List<TypeCmplt> listeType = new ArrayList<TypeCmplt>();
    listeType = query.getResultList();
    return listeType;
}

测试方法:

    @Test
public void listerComplementsParTypeTest(){
    logger.debug("Afficher la liste des types de complémént") ;

    try {
        List<TypeCmplt> type = cmpltTitreDao.listerrTypeCmplt();
        for (int i = 0; i < type.size(); i++) {
            System.out.println(type.get(i));
        }

    } catch (DaoException e) {
        logger.error("Erreur", e) ;
    }

但我明白了:

Hibernate: select typecmplt0_.CD_TYPE_CMPLT as col_0_0_, typecmplt0_.LB_TYPE_CMPLT as col_1_0_ from TC_TYPE_CMPLT typecmplt0_
[Ljava.lang.Object;@4d2b11
[Ljava.lang.Object;@46a5c4
[Ljava.lang.Object;@2d09e0
[Ljava.lang.Object;@e38fca

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您正在尝试打印名为Object的{​​{1}}。尝试拨打TypeCmplt。正如@kostja所说,你可能最好在toString()覆盖toString()

像这样:

TypeCmplt

或者:

System.out.println(type.get(i).toString());

在这种情况下,您应该相应地替换TypeCmplt t = type.get(i); System.out.println(t.getLong() + ": " + t.getString()); getLong()

答案 1 :(得分:1)

您正在为结果创建List<TypeCmplt>。但是结果列表是Object的数组,因为您正在进行投影查询 - 提取TypeCmplt的单个属性。如果要使TypeCmplt实体正确,请将查询字符串更改为

"select t from TypeCmplt t"

如果你想提取实体的几个属性,但是要以类型安全的方式进行,那么构造函数表达式就是这样的:

List<MyClass> dtos = cmpltTitreEM.createQuery("SELECT NEW com.example.MyClass( t.cdTypeCmplt, t.lbTypeCmplt) FROM TypeCmplt t").getResultList();