-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: Hibernate failing to generate Identity key in MS SQL
PostPosted: Sat Feb 20, 2010 8:26 pm 
Newbie

Joined: Sat Feb 20, 2010 8:21 pm
Posts: 2
I am using hibernate3.2 and database as MS SQL and using Java program. The application is running on WAS. I am seeing that hibernate is failing to generate autokey when the table has trigger. I tried to disable the trigger and tested, the application is working fine.
Can someone please give me any idea on why hibernate is failing to generate autokey when table has triggers?

thanks in advance
Naresh


Top
 Profile  
 
 Post subject: Re: Hibernate failing to generate Identity key in MS SQL
PostPosted: Mon Feb 22, 2010 10:08 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Which exception do you get if the trigger is enabled?
Does the trigger perform updates or inserts?


Top
 Profile  
 
 Post subject: Re: Hibernate failing to generate Identity key in MS SQL
PostPosted: Mon Feb 22, 2010 10:21 am 
Newbie

Joined: Sat Feb 20, 2010 8:21 pm
Posts: 2
Hi,

I am getting the following error when trigger is enabled in the table. the trigger does insert new record in another table whenever any new record inserted into the table.

2/18/10 21:09:08:183 EST] 0000009c SystemErr R org.hibernate.exception.GenericJDBCException: could not insert: [com.cardinal.distribution.ams.data.domain.QCWActivity]

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at com.cardinal.distribution.ams.data.dao.QCWActivityDAOImpl.create(QCWActivityDAOImpl.java:190)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at com.cardinal.distribution.ams.pickmanager.vpdmanager.VDPManager.processOrderFulfillment(VDPManager.java:674)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at com.cardinal.distribution.ams.vdpi.FulfillmentDataProcessorThread.run(FulfillmentDataProcessorThread.java:74)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained.

at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)

at com.microsoft.sqlserver.jdbc.SQLServerStatement.getGeneratedKeys(Unknown Source)

at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.getGeneratedKeys(WSJdbcStatement.java:1965)

at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:97)

at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)

at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)

at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)

at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)

at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)

at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)

at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)

at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)

at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)

at com.cardinal.distribution.ams.data.dao.QCWActivityDAOImpl.create(QCWActivityDAOImpl.java:190)

at com.cardinal.distribution.ams.pickmanager.vpdmanager.VDPManager.processOrderFulfillment(VDPManager.java:674)

at com.cardinal.distribution.ams.vdpi.FulfillmentDataProcessorThread.run(FulfillmentDataProcessorThread.java:74)



[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at com.microsoft.sqlserver.jdbc.SQLServerStatement.getGeneratedKeys(Unknown Source)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.getGeneratedKeys(WSJdbcStatement.java:1965)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:97)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)

[2/18/10 21:09:08:183 EST] 0000009c SystemErr R ... 18 more


Thanks,
Naresh


Top
 Profile  
 
 Post subject: Re: Hibernate failing to generate Identity key in MS SQL
PostPosted: Mon Feb 22, 2010 11:28 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
This seems more to be a jdbc-driver issue than a hiberante issue.
Hibernate just calls following method
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Statement.html#getGeneratedKeys()
which is allowed, and it's this method which throws the exception.

Suggestions:
1. Check if you use latest versions of MS SQL driver.
2. Your SQLServerDriver it not used directly, it is wrapped by a class in package com.ibm.ws.rsadapter.jdbc
Not knowing what this wrapper does, I would suggest make a try with using MS SQL driver directly without wrapper.
3. Try jtds driver instead to SQLServerDriver
4. Last but not least: Not use native IdentityGenerator, use another IdentityGenerator.
Native IdentityGenerator (= let the database assign the new key) has some serious disadvantages:
One might the problem you report here.
Another disadvantage regards performance:
native IdentityGenerator produces a database-hit whenever you persist a new object
(with other strategies the insert operation is deferred until flush/commit),
thus batch-inserting becomes impossible.
Inserts with IdentityGenerator (strategy = GenerationType.TABLE) are much faster.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 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.