【问题标题】:does hibernate support to run MERGE statement or not?hibernate 是否支持运行 MERGE 语句?
【发布时间】:2017-04-16 18:53:06
【问题描述】:

当我执行以下本机查询时:

String sql="merge into omfx.OM_PART_LOOKUP   toLookup\r\n" + 
        "           using omfx.OM_PART_LOOKUP fromLookup\r\n" + 
        "               on(\r\n" + 
        "                 toLookup.PROJECT_ID= "+toProjectID+" and \r\n" + 
        "                 fromLookup.PROJECT_ID= "+fromProjectId +" and  \r\n" + 
        "                 toLookup.scope =0 and \r\n" + 
        "                 UPPER(toLookup.PN)  =  UPPER(fromLookup.PN) and\r\n" + 
        "                 UPPER(toLookup.MAN)  =  UPPER(fromLookup.MAN)\r\n" + 
        "                )\r\n" + 
        "           when matched then update \r\n" + 
        "               set \r\n" + 
        "             \r\n" + 
        "             toLookup.SEPN = fromLookup.SEPN ,\r\n" + 
        "             toLookup.SE_MAN_ID = fromLookup.SE_MAN_ID ,\r\n" + 
        "             toLookup.COM_ID = fromLookup.COM_ID ,\r\n" + 
        "             toLookup.SE_MAN_NAME = fromLookup.SE_MAN_NAME ,\r\n" + 
        "             toLookup.PART_CATEGORY = fromLookup.PART_CATEGORY \r\n" + 
        "             \r\n" + 
        "             \r\n" + 
        "            when NOT matched then \r\n" + 
        "            insert (PN,MAN,SEPN, SE_MAN_ID, COM_ID,SE_MAN_NAME ,PART_CATEGORY ,INSERT_DATE,PROJECT_ID)\r\n" + 
        "             values (fromLookup.PN,fromLookup.MAN,fromLookup.SEPN, fromLookup.SE_MAN_ID, fromLookup.COM_ID , fromLookup.SE_MAN_NAME ,fromLookup.PART_CATEGORY , SYSDATE,"+toProjectID+") where\r\n" + 
        "             fromLookup.PROJECT_ID = "+fromProjectId+" and fromLookup.scope = 0\r\n" + 
        "            ";

    System.out.println("projectOperationsBean.mergeManLookup()::sql=="+sql);
     em.createNativeQuery(sql).getSingleResult();

我发现以下错误

本地异常堆栈: 异常 [EclipseLink-4002] (Eclipse Persistence Services - 2.4.2.v20130514-5956486): org.eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.SQLException:ORA-00900:无效的 SQL 语句

错误代码:0

但是当我在 oracle 中执行这个查询时,它运行良好

hibernate 是否支持运行 MERGE 语句?

【问题讨论】:

  • 那与休眠无关。您以错误的方式执行此查询。首先从查询字符串中删除所有\r\n。其次,确保这些连接正确完成(顺便说一句,这是错误的做法,您应该使用准备好的语句)。
  • 另外,这是一个应该使用 executeUpdate 而不是 getSingleResult 执行的语句
  • @JorgeCampos:\r\n 不是问题,Oracle 可以毫无问题地处理。
  • @JorgeCampos:executeUpdate 解决的问题不是 getSingleResult

标签: java sql oracle hibernate


【解决方案1】:

感谢@Jorge Campos

MERGE 是 DML 语句,所以我必须执行 .executeUpdate() 而不是 .getSingleResult()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2014-10-07
    • 2013-12-06
    • 2016-12-04
    • 1970-01-01
    相关资源
    最近更新 更多