Select in SAP HANA + Hibernate throws error: `Method unwrap of com.sap.db.jdbc.CallableStatementSapDBFinalize is not supported`
Select in SAP HANA + Hibernate throws error: `Method unwrap of com.sap.db.jdbc.CallableStatementSapDBFinalize is not supported`
我有以下 table:
CREATE column TABLE banks (
sk tinyint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
code varchar(10) DEFAULT NULL,
name varchar(100) DEFAULT NULL,
version smallint DEFAULT NULL,
PRIMARY KEY (sk)
);
我尝试使用以下代码(在 Scala 中)select table 的行:
import scala.collection.JavaConverters._
object Test extends App {
val session = HibernateUtil.sessionFactory.openSession
val q = session.createQuery("from BankHib ")
val list2 = q.list // <-- code breaks here
session.close
}
具有以下实体定义:
@Entity
@Table(name = "banks")
class BankHib {
@Id
var sk: Int = _
var code: String = _
var name: String = _
var version: Int = _
}
以及获取会话工厂的实用程序:
object HibernateUtil {
val sessionFactory = buildSessionFactory
def buildSessionFactory = {
try {
new Configuration().configure().buildSessionFactory();
} catch {case ex:Throwable =>
println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
def shutdown {
sessionFactory.close
}
}
当我 运行 测试对象时,我得到以下异常:
Caused by: com.sap.db.jdbc.exceptions.SQLFeatureNotSupportedExceptionSapDB: Method unwrap of com.sap.db.jdbc.CallableStatementSapDBFinalize is not supported.
at com.sap.db.jdbc.exceptions.SQLExceptionSapDB._createException(SQLExceptionSapDB.java:155)
at com.sap.db.jdbc.exceptions.SQLExceptionSapDB.generateSQLException(SQLExceptionSapDB.java:26)
at com.sap.db.jdbc.WrapperDummy.unwrap(WrapperDummy.java:25)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:64)
... 26 more
问题是什么以及如何解决?不支持的功能是什么?
异常始于最近修改的休眠代码。
链接的问题是这个:https://hibernate.atlassian.net/browse/HHH-10256
更改是在 hibernate 5.2.8 上进行的。因此,如果您使用的是 5.2.8+ 版本(显然您给出的错误指向 5.2.10 版本),您可以尝试降级到 5.2.7 吗?
我很担心,因为非常老的 sap 驱动程序似乎可以使用旧代码。如果较新的 hana 驱动程序与较新的代码有问题,则很难找到休眠版本和 sap 驱动程序版本之间的正确匹配。
如果您对 5.2.7 和 5.2.10 有异常,则必须重新打开休眠问题。
而且您还获得了 SAP 对 hana 的支持(如果您使用 hana,您已经为此付费)所以请与他们联系以获得更好的驱动程序来正确支持 JDBC。他们可能甚至不会回答(你付了一个产品,不是告诉他们有 bug,bug 总是在你这边)但谁知道呢。
我有以下 table:
CREATE column TABLE banks (
sk tinyint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
code varchar(10) DEFAULT NULL,
name varchar(100) DEFAULT NULL,
version smallint DEFAULT NULL,
PRIMARY KEY (sk)
);
我尝试使用以下代码(在 Scala 中)select table 的行:
import scala.collection.JavaConverters._
object Test extends App {
val session = HibernateUtil.sessionFactory.openSession
val q = session.createQuery("from BankHib ")
val list2 = q.list // <-- code breaks here
session.close
}
具有以下实体定义:
@Entity
@Table(name = "banks")
class BankHib {
@Id
var sk: Int = _
var code: String = _
var name: String = _
var version: Int = _
}
以及获取会话工厂的实用程序:
object HibernateUtil {
val sessionFactory = buildSessionFactory
def buildSessionFactory = {
try {
new Configuration().configure().buildSessionFactory();
} catch {case ex:Throwable =>
println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
def shutdown {
sessionFactory.close
}
}
当我 运行 测试对象时,我得到以下异常:
Caused by: com.sap.db.jdbc.exceptions.SQLFeatureNotSupportedExceptionSapDB: Method unwrap of com.sap.db.jdbc.CallableStatementSapDBFinalize is not supported.
at com.sap.db.jdbc.exceptions.SQLExceptionSapDB._createException(SQLExceptionSapDB.java:155)
at com.sap.db.jdbc.exceptions.SQLExceptionSapDB.generateSQLException(SQLExceptionSapDB.java:26)
at com.sap.db.jdbc.WrapperDummy.unwrap(WrapperDummy.java:25)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:64)
... 26 more
问题是什么以及如何解决?不支持的功能是什么?
异常始于最近修改的休眠代码。
链接的问题是这个:https://hibernate.atlassian.net/browse/HHH-10256
更改是在 hibernate 5.2.8 上进行的。因此,如果您使用的是 5.2.8+ 版本(显然您给出的错误指向 5.2.10 版本),您可以尝试降级到 5.2.7 吗?
我很担心,因为非常老的 sap 驱动程序似乎可以使用旧代码。如果较新的 hana 驱动程序与较新的代码有问题,则很难找到休眠版本和 sap 驱动程序版本之间的正确匹配。
如果您对 5.2.7 和 5.2.10 有异常,则必须重新打开休眠问题。
而且您还获得了 SAP 对 hana 的支持(如果您使用 hana,您已经为此付费)所以请与他们联系以获得更好的驱动程序来正确支持 JDBC。他们可能甚至不会回答(你付了一个产品,不是告诉他们有 bug,bug 总是在你这边)但谁知道呢。