【问题标题】:native query SELECT multiple table hibernate and oracle本机查询SELECT多表休眠和oracle
【发布时间】:2019-01-31 13:25:07
【问题描述】:

我有一个 SQL 查询来获取两个 SELECT 表。
我想在结果中获取两个表作为实体。
这些表是某些列的名称是相等的(id,版本)。
我有以下代码:

String sql = "select sepTemp.*,pspTerm.* " +
            "from SEPTRANSACTIONTEMP sepTemp " +
            "LEFT JOIN PSP_Terminal pspTerm ON (pspTerm.idInPSP=sepTemp.termid AND pspTerm.pspID=:pspID) " +
            "where NOT EXISTS " +
            "(select * from PSPTRANSACTION pspTrans where pspTrans.PSPID=:pspID AND pspTrans.termNo=sepTemp.rrn) ";

    List<Object[]> sepTransactionTemps = em.createNativeQuery(sql)
            .setParameter("pspID", PSPTypes.SEP.getType())
            .getResultList();

 sepTransactionTemps.forEach(row -> {
                SEPTransactionTemp sepTransactionTemp = ((SEPTransactionTemp) row[0]);
                PSPTerminal sepTransactionTemp = ((PSPTerminal) row[1]);
...

但抛出异常如下:

org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias [ID] during auto-discovery of a native-sql query

【问题讨论】:

标签: java oracle hibernate jpa


【解决方案1】:

您的表中存在列 ID(SEPTRANSACTIONTEMP,LEFT JOIN PSP_Terminal)
在您的选择查询中为 id 列创建别名

    String sql = "select " + 
            "sepTemp.id as sepTemp_id, " + 
            "sepTemp.version as sepTemp_version, " +
            "pspTerm.id as pspTerm_id, " + 
            "pspTerm.version as pspTerm_version " // try here add all your column names 
        + " from SEPTRANSACTIONTEMP sepTemp LEFT JOIN PSP_Terminal pspTerm "
        + "ON (pspTerm.idInPSP=sepTemp.termid AND pspTerm.pspID=:pspID) " + "where NOT EXISTS "
        + "(select * from PSPTRANSACTION pspTrans where pspTrans.PSPID=:pspID AND pspTrans.termNo=sepTemp.rrn) ";


List<Object[]> sepTransactionTemps = em.createNativeQuery(sql).setParameter("pspID", PSPTypes.SEP.getType())
        .getResultList();

【讨论】:

  • 列数高
  • 我很遗憾告诉你这是实现这一目标的唯一方法
  • 蛮力替代方案是ALTER TABLE .. RENAME COLUMN
猜你喜欢
  • 2011-08-10
  • 2012-11-22
  • 2012-03-29
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多