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
而不是 ?
.
有点具体的问题,但这正是我正在努力解决的问题。
我在 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
而不是 ?
.