OpenJPA 和存储过程,Weblogic 12c

OpenJPA and stored procedures, Weblogic 12c

有点具体的问题,但这正是我正在努力解决的问题。

我在 Weblogic 11g 上使用 OpenJPA 1.2.3,在 Sybase 数据库上调用存储过程。使用了com.sybase.jdbc2.jdbc.SybDriver。最近我们升级到 Weblogic 12c,但该配置并没有像希望的那样工作。当执行执行存储过程调用的应用程序时,它给出了

javax.persistence.PersistenceException: java.lang.AbstractMethodError: weblogic.jdbc.wrapper.DatabaseMetaData_com_sybase_jdbc2_jdbc_SybDatabaseMetaData.getDatabaseMajorVersion() 

升级到更新的驱动程序com.sybase.jdbc4.jdbc.SybDriver

现在我得到了

org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: JZ0S8: An escape sequence in a SQL Query was malformed: '{call mydb..my_stored_procedure @input=?'. Error Code: 0 at
weblogic.ejb.container.internal.RemoteBusinessIntfProxy.unwrapRemoteException(RemoteBusinessIntfProxy.java:117) at

如有必要,可以提供完整的堆栈跟踪。

我的实体:

package com.example.ejb.entities;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedNativeQuery;

@Entity
@NamedNativeQuery(name="my_stored_procedure",
        query="{call mydb..my_stored_procedure @input=?}",
        resultClass=EntityJPA.class)
public class EntityJPA implements Serializable{

  private static final long serialVersionUID = 1L;

  @Id
  @Column(name="id")
  private String id;

  @Column(name="input")
  private int input;

  @Column(name="statuscode")
  private String statuscode;

  @Column(name="statusdescription")
  private String statusdescription;

  public String getStatuscode() {
    return statuscode;
  }

  public void setStatuscode(String statuscode) {
    this.statuscode = statuscode;
  }

  public String getStatusdescription() {
    return statusdescription;
  }

  public void setStatusdescription(String statusdescription) {
    this.statusdescription = statusdescription;
  }

  public int getInput() {
    return input;
  }

  public void setInput(int input) {
    this.input = input;
  }

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

}

这在 WebLogic 11g 上很有用。

任何人都可以指出正确的方向以便解决此错误吗?

在我看来,?} 序列被篡改了,原因是错误消息中缺少右大括号。尝试 a) 以某种方式将它们分开,或 b) 使用命名参数符号,如 :input 而不是 ?.