【问题标题】:JPQL multiple selectJPQL 多选
【发布时间】:2013-04-17 17:11:14
【问题描述】:

我想像这样从 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

有人可以帮忙吗?

【问题讨论】:

  • 你能把课程发帖TypeCmplt吗?

标签: hibernate jpa jpql


【解决方案1】:

您正在为您的结果创建一个List&lt;TypeCmplt&gt;。但结果列表是Object 的数组,因为您正在进行投影查询 - 提取TypeCmplt 的单个属性。如果您想正确获取TypeCmpltentities,请将查询字符串更改为

"select t from TypeCmplt t"

如果您确实想提取实体的多个属性,但要以类型安全的方式进行,那么构造函数表达式是可行的方法:

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

【讨论】:

  • 谢谢,但即使我尝试使用 slf4j 显示 TypeCmplt 我也得到了相同的结果,TypeCmplt 也包含两列,长整数和字符串,问题是当我尝试只得到一列时它可以工作!
  • @SafwenKhalloufi - 这就是投影查询的工作方式 - 如果您要检索实体的多个属性,您将获得 Object 的数组
  • @SafwenKhalloufi - 不客气。我发现我最初的假设是不正确的,所以我删除了它。
【解决方案2】:

您正在尝试打印一个名为TypeCmpltObject。尝试拨打toString()。正如@kostja 所说,您最好在TypeCmplt 中覆盖toString()

像这样:

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

或者:

TypeCmplt t = type.get(i);
System.out.println(t.getLong() + ": " + t.getString());

在这种情况下,您应该相应地替换 getLong()getString()

【讨论】:

  • type 包含两列,longs 和 strings,问题是当我尝试只获取一列时它可以工作!
猜你喜欢
  • 2012-09-07
  • 2017-11-17
  • 2021-09-05
  • 2013-12-02
  • 2016-07-08
  • 2021-08-19
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
相关资源
最近更新 更多