-->
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.  [ 27 posts ]  Go to page Previous  1, 2
Author Message
 Post subject:
PostPosted: Wed Apr 20, 2005 5:06 am 
Beginner
Beginner

Joined: Thu Sep 02, 2004 4:54 am
Posts: 24
yes i've seen... :(
the thing is that there isn't the same error for ms sql driver:

20 11:00:57 DEBUG [org.hibernate.transaction.JDBCTransaction] begin
20 11:00:57 DEBUG [org.hibernate.transaction.JDBCTransaction] current autocommit status: true
20 11:00:57 DEBUG [org.hibernate.transaction.JDBCTransaction] disabling autocommit
20 11:00:57 DEBUG [org.hibernate.event.def.DefaultSaveOrUpdateEventListener] saving transient instance
20 11:00:57 DEBUG [org.hibernate.event.def.AbstractSaveEventListener] generated identifier: , using strategy: org.hibernate.id.IdentityGenerator
20 11:00:57 DEBUG [org.hibernate.event.def.AbstractSaveEventListener] saving [fr.digimind.jdo.hibernate.Product#<null>]
20 11:00:57 DEBUG [org.hibernate.event.def.AbstractSaveEventListener] executing insertions
20 11:00:57 DEBUG [org.hibernate.persister.entity.BasicEntityPersister] Inserting entity: fr.digimind.jdo.hibernate.Product (native id)
20 11:00:57 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
20 11:00:57 DEBUG [org.hibernate.SQL] {call add_product (?)}
20 11:00:57 DEBUG [org.hibernate.jdbc.AbstractBatcher] preparing statement
20 11:00:58 DEBUG [org.hibernate.persister.entity.BasicEntityPersister] Dehydrating entity: [fr.digimind.jdo.hibernate.Product#<null>]
20 11:00:58 DEBUG [org.hibernate.type.StringType] binding 'test3' to parameter: 1
20 11:00:58 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
20 11:00:58 DEBUG [org.hibernate.jdbc.AbstractBatcher] closing statement
20 11:00:58 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
20 11:00:58 DEBUG [org.hibernate.SQL] call identity()
20 11:00:58 DEBUG [org.hibernate.jdbc.AbstractBatcher] preparing statement
20 11:00:58 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
20 11:00:58 DEBUG [org.hibernate.jdbc.AbstractBatcher] closing statement
20 11:00:58 DEBUG [org.hibernate.util.JDBCExceptionReporter] could not insert: [fr.digimind.jdo.hibernate.Product] [call identity()]
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Syntaxe incorrecte vers le mot clé 'identity'.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.executeQuery(Unknown Source)
at org.hibernate.id.AbstractPostInsertGenerator.getGenerated(AbstractPostInsertGenerator.java:42)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1794)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2187)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:34)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:238)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:158)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:104)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:445)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:440)
at fr.digimind.jdo.hibernate.FindProductByName.main(FindProductByName.java:90)
20 11:00:58 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 156, SQLState: HY000
20 11:00:58 ERROR [org.hibernate.util.JDBCExceptionReporter] [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Syntaxe incorrecte vers le mot clé 'identity'.


it seems that the identity() Sp isn't supported by the DB.
is there a way for me to change the "call identity()" syntax which is (I think) automatically generated because brackets ({call identity()}) have to used... fort the jTDS driver.

Thanks


Top
 Profile  
 
 Post subject:
PostPosted: Wed Apr 20, 2005 5:36 am 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 6:10 am
Posts: 8615
Location: Neuchatel, Switzerland (Danish)
call identity() is something you have written in your mappings correct ?

_________________
Max
Don't forget to rate


Top
 Profile  
 
 Post subject:
PostPosted: Wed Apr 20, 2005 5:37 am 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 6:10 am
Posts: 8615
Location: Neuchatel, Switzerland (Danish)
hmmm .... "call identity()" is only present in HSQLDialect in hibernate. i think you need to use the proper dialect ;)

_________________
Max
Don't forget to rate


Top
 Profile  
 
 Post subject:
PostPosted: Wed Apr 20, 2005 5:58 am 
Beginner
Beginner

Joined: Thu Sep 02, 2004 4:54 am
Posts: 24
Ooops...
I've forgotten to change the dialect.... I thought it should have told me earlier.
thank you very much now it works perfectly!!!


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 20, 2005 9:27 pm 
Newbie

Joined: Tue May 31, 2005 8:19 pm
Posts: 16
Location: San Francisco, CA
I'm reviving this thread, given that the author resolved their issue, but I have a very similar issue and can not get it working.

Due to legacy, I am using stored procedures for CRUD with SQL Server 7.0 and the jTDS driver (v1.0.3). I am having a problem with my <sql-insert>. When I put custom SQL inside this tag everything works fine. But when I put a call to my stored proc inside, I am getting the following stack trace:

org.hibernate.HibernateException: The database returned no natively generated identity value
at org.hibernate.id.IdentifierGeneratorFactory.getGeneratedIdentity(IdentifierGeneratorFactory.java:33)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1761)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2178)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:34)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:240)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:160)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:95)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:96)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:468)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:463)
at org.springframework.orm.hibernate3.HibernateTemplate$18.doInHibernate(HibernateTemplate.java:615)

my class:

public class Patient {
private Integer id;
private String firstName;
private String lastName;

public Patient() {}
public Integer getId() {return id;}
private void setId(Integer id) {this.id = id;}
public String getFirstName() {return firstName;}
public void setFirstName(String firstName) {this.firstName = firstName;}
public String getLastName() {return lastName;}
public void setLastName(String lastName) {this.lastName = lastName;}
}

<hibernate-mapping>
<class name="edu.ucsf.memory.lava.model.Patient">
<id name="id">
<column name="PIDN" not-null="true"/>
<generator class="native"/>
</id>
<property name="firstName" column="FName"/>
<property name="lastName" column="LName"/>
<loader query-ref="spPatientNameOnlyView"/>
<sql-insert callable="true">{call spPatientNameOnlyAdd (?, ?)}</sql-insert>
<sql-update callable="true">{? = call spPatientNameOnlyUpdate (?, ?, ?)}</sql-update>
<sql-delete callable="true">{? = call spPatientNameOnlyDelete (?, ?)}</sql-delete>
</class>
</hibernate-mapping>

The above throws the:
The database returned no natively generated identity value exception.

But if I remove <sql-insert> altogether or put substitute this:
<sql-insert>insert into patient (fname, lname) values (?, ?)</sql-insert>

things work fine and the id is generated properly. I can see that Hibernate is calling:
SELECT @@IDENTIFY AS ID
but for some reason it does not do this if I call a stored procedure. Unfortunately I can not use the SelectGenerator because there are no other keys (and for some reason, I can't get Select Generator to work anyways)

The stored proc is:

CREATE PROCEDURE spPatientNameOnlyAdd @LName varchar(25), @FName varchar(25) AS
INSERT INTO patient (LName, FName) values (@LName, @FName)
RETURN 1

Any ideas ? Any restrictions on the stored procedure, or perhaps jTDS driver settings ?

Thanks,
Charlie


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 21, 2005 3:08 am 
Beginner
Beginner

Joined: Thu Sep 02, 2004 4:54 am
Posts: 24
Hi,
did you try with the 'select @@identity' at the end of your stored procedure?


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 21, 2005 1:25 pm 
Newbie

Joined: Tue May 31, 2005 8:19 pm
Posts: 16
Location: San Francisco, CA
I tried your suggestion.

Adding 'select @@identity' to the end of the stored proc does not change anything. I still get
The database returned no natively generated identity value

And if I add SET NOCOUNT ON at the top of the stored proc, adding 'select @@identity to the end, it throws this exception:

java.sql.SQLException: The executeUpdate method must not return a result set.
at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:484)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:427)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeUpdate(JtdsPreparedStatement.java:397)
at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:316)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1759)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2178)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:34)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:240)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:160)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:95)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:96)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:468)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:463)


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jun 22, 2005 3:38 am 
Beginner
Beginner

Joined: Thu Sep 02, 2004 4:54 am
Posts: 24
which version of hibernate are you using?
I'm using sql server 2000 with hibernate 3.0.1 and it works perfectly even with the 'set nocount on'
sorry, I'm kind of useless...


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 23, 2005 1:59 pm 
Newbie

Joined: Tue May 31, 2005 8:19 pm
Posts: 16
Location: San Francisco, CA
I'm using Hibernate 3.0.5 and SQL Server 7 --- maybe SQL Server 7 is the problem. In fact, I have to explictiy do SET NOCOUNT OFF (OFF not ON) in order for my update/delete stored procs to work, i.e. to return the number of rows updated --- if I have SET NOCOUNT ON then Hibernate gives a staleobject exception thinking that no rows were updated because of a concurrency conflict. When I do SET NOCOUNT OFF then Hibernate is happy. Very strange, as this is in conflict with the very brief Hibernate documentation on stored procs which says that SET NOCOUNT ON is recommended with SQL Server stored procs.

Anyway, maybe SQL Server 7 behaves differently this way than your SQL Server 2000.

Thanks for trying to help.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jun 24, 2005 8:31 am 
jTDS Developer
jTDS Developer

Joined: Tue Feb 24, 2004 5:36 pm
Posts: 70
Location: Bucharest, Romania
Charlie,

Try enabling DriverManager logging immediately before the relevant piece of code (and disabling it afterwards) and post the resulting log dump. That may help finding out what happens. Probably your stored procedure returns some other results too that confuse jTDS.

Alin,
The jTDS Project.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 11, 2008 4:14 am 
Newbie

Joined: Thu Oct 04, 2007 2:42 am
Posts: 2
Location: Kazakhstan, Aqtobe
ctoohey
Try to add in hibernate.cfg.xml:
Code:
<property name="jdbc.use_get_generated_keys">false</property>

It helped me. I had the same symptoms as you have.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jul 16, 2008 6:14 am 
Expert
Expert

Joined: Tue May 13, 2008 3:42 pm
Posts: 919
Location: Toronto & Ajax Ontario www.hibernatemadeeasy.com
<property name="jdbc.use_get_generated_keys">false</property>

I made that same entry and a similar problem went away.

Thanks!

_________________
Cameron McKenzie - Author of "Hibernate Made Easy" and "What is WebSphere?"
http://www.TheBookOnHibernate.com Check out my 'easy to follow' Hibernate & JPA Tutorials


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 27 posts ]  Go to page Previous  1, 2

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.