Hibernate Books

All times are UTC - 5 hours [ DST ]



Post new topic Reply to topic  [ 8 posts ] 
Author Message
 Post subject: UnsupportedOperationException with SAP HANA and Hibernate
PostPosted: Tue Mar 28, 2017 5:24 am 
Newbie

Joined: Tue Mar 28, 2017 1:55 am
Posts: 4
I want to connect to a SAP HANA database using Hibernate.
My test database consists of only 1 column based table:

Code:
PERSON (ID, FIRSTNAME, SURNAME)


and the corresponding Hibernate object ‘Person’.


When I try to execute a simple query using

Code:
aHibernateSession.createCriteria(Person.class).list()


I get the following exception:

Code:
java.lang.UnsupportedOperationException: org.hibernate.dialect.HANAColumnStoreDialect does not support resultsets via stored procedures
   at org.hibernate.dialect.Dialect.getResultSet(Dialect.java:1524)


This exception appears using Hibernate 4.3 as well as using Hibernate 5.2, using HANAColumnStoreDialect as well as HANARowStoreDialect

When turning on the show-sql flag the only statement that is executed is

Code:
select this_.ID as ID1_0_0_, this_.FIRSTNAME as FIRSTNAME2_0_0_, this_.SURNAME as SURNAME3_0_0_ from PERSON this_


Why does Hibernate try to call a stored procedure here? Or do I miss something?


Top
 Profile  
 
 Post subject: Re: UnsupportedOperationException with SAP HANA and Hibernate
PostPosted: Tue Mar 28, 2017 5:54 am 
Hibernate Team
Hibernate Team

Joined: Thu Sep 11, 2014 2:50 am
Posts: 1038
I'm not aware of how a Criteria query can end up calling a Stored Procedure. You should debug it and see where the call originate from.

Did you override the default SELECT, INSERT, UPDATE or DELETE statements when you mapped the entity?

_________________
If you liked my answer, you are going to love my High-Performance Java Persistence book and my blog as well.


Top
 Profile  
 
 Post subject: Re: UnsupportedOperationException with SAP HANA and Hibernate
PostPosted: Tue Mar 28, 2017 6:08 am 
Newbie

Joined: Tue Mar 28, 2017 1:55 am
Posts: 4
Thank you for your quick reply.

No, I didn't override anything. My test scenario is as simple as possible.

Even when I use a plain sql statment like

Code:
session.createSQLQuery("select * from PERSON").list();


I get the exception.

Here is the full stack trace:

Code:
java.lang.UnsupportedOperationException: org.hibernate.dialect.HANAColumnStoreDialect does not support resultsets via stored procedures
   at org.hibernate.dialect.Dialect.getResultSet(Dialect.java:1524)
   at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:117)
   at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:64)
   at org.hibernate.loader.Loader.getResultSet(Loader.java:2123)
   at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1911)
   at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1887)
   at org.hibernate.loader.Loader.doQuery(Loader.java:932)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:349)
   at org.hibernate.loader.Loader.doList(Loader.java:2615)
   at org.hibernate.loader.Loader.doList(Loader.java:2598)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2430)
   at org.hibernate.loader.Loader.list(Loader.java:2425)
   at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:335)
   at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2153)
   at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:991)
   at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:147)
   at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1410)
   at ts.HanaTestHibernate5.main(HanaTestHibernate5.java:98)


Top
 Profile  
 
 Post subject: Re: UnsupportedOperationException with SAP HANA and Hibernate
PostPosted: Tue Mar 28, 2017 9:00 am 
Hibernate Team
Hibernate Team

Joined: Thu Sep 11, 2014 2:50 am
Posts: 1038
It might be an issue with the HANA Driver.

You need to help me debug it since I don't have HANA installed locally. If you debug the

Code:
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl


at line 59:

Code:
if ( isTypeOf( statement, CallableStatement.class ) ) {


Is the PreparedStatement implementing CallableStatement?

That could be the problem.

_________________
If you liked my answer, you are going to love my High-Performance Java Persistence book and my blog as well.


Top
 Profile  
 
 Post subject: Re: UnsupportedOperationException with SAP HANA and Hibernate
PostPosted: Tue Mar 28, 2017 9:09 am 
Newbie

Joined: Tue Mar 28, 2017 1:55 am
Posts: 4
Yes, the created statement is of class

Code:
com.sap.db.jdbc.CallableStatementSapDBFinalize
.


Top
 Profile  
 
 Post subject: Re: UnsupportedOperationException with SAP HANA and Hibernate
PostPosted: Tue Mar 28, 2017 10:13 am 
Hibernate Team
Hibernate Team

Joined: Thu Sep 11, 2014 2:50 am
Posts: 1038
Thanks for confirming it. I created the HHH-11600 Jira issue for it.

What I need you to do is confirm if the proposed fix works. So, you need to do as follows:

1. Create a class CustomHANARowStoreDialect or CustomHANAColumnStoreDialect depending on what storage engine you need to use, and this class should either extend HANARowStoreDialect or HANAColumnStoreDialect from Hibernate.
2. Add this overriding method:

Code:
@Override
public ResultSet getResultSet(CallableStatement ps) throws SQLException {
   return ps.executeQuery();
}


3. Set the hibernate.dialect to use your CustomHANARowStoreDialect or CustomHANAColumnStoreDialect :

Code:
<property name="hibernate.dialect" value="my.package.CustomHANARowStoreDialect" />


Let me know if it works, as I could then apply the fix to Hibernate as well.

_________________
If you liked my answer, you are going to love my High-Performance Java Persistence book and my blog as well.


Top
 Profile  
 
 Post subject: Re: UnsupportedOperationException with SAP HANA and Hibernate
PostPosted: Wed Mar 29, 2017 1:12 am 
Newbie

Joined: Tue Mar 28, 2017 1:55 am
Posts: 4
Thank you very much.

Overriding
Code:
getResultSet
of
Code:
HANAColumnStoreDialect
worked.
Now I can retrieve the result list.


Top
 Profile  
 
 Post subject: Re: UnsupportedOperationException with SAP HANA and Hibernate
PostPosted: Wed Mar 29, 2017 2:01 am 
Hibernate Team
Hibernate Team

Joined: Thu Sep 11, 2014 2:50 am
Posts: 1038
This is only a workaround! Thanks for testing it, and I'll fix it properly in the core as well.

_________________
If you liked my answer, you are going to love my High-Performance Java Persistence book and my blog as well.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 8 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.