Hi, i've a problem with Hibernate3/Firebird 1.5 using trigger for generate id:
This is my mapping:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="it.unitn.cs.hibernate.WorkGroup" table="`workgroups`">
<id column="workgroupId" name="uniqueId" type="java.lang.Integer">
<generator class="select">
<param name="key">tempId</param>
</generator>
</id>
<timestamp column="`version`" name="version" />
<property column="`workgroupId`" name="tempId" type="java.lang.Integer" insert="false" update="false" />
<property column="`name`" name="name" type="java.lang.String" />
<property column="`description`" name="description" type="java.lang.String" />
<property column="`isDefault`" name="isDefault" type="int" />
</class>
</hibernate-mapping>
If i understand the use of "select" generator i must create a field in class for temporany use of hibernate..my class has two field first called uniqueId that conteins the really id returned from trigger and second property called tempId for hibernate use...
the problem is that i must escape the name of colums and table in firebird and the hibernate produced this sql:
- insert into "workgroups" ("version", "name", "description", "isDefault") values (?, ?, ?, ?) -> correctly
- select workgroupId from "workgroups" where "workgroupId" =? -> Wrong because workgroupId must be escaped....
it's a bug or i don't understand the "select" property of element generator...
Thank's in advance...
Hibernate version:3 RC1
Documets for use trigger: http://www.hibernate.org/hib_docs/v3/re ... -id-select
Full stack trace of any exception that occurs:
org.hibernate.exception.GenericJDBCException: could not insert: [it.unitn.cs.hibernate.WorkGroup]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.id.AbstractPostInsertGenerator.getGenerated(AbstractPostInsertGenerator.java:56)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1755)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2149)
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:429)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:424)
at it.unitn.cs.test.hibernate.HibernateBaseTest.testSave(HibernateBaseTest.java:35)
at it.unitn.cs.test.hibernate.pojo.WorkGroupTest.testCreateWorkgroup(WorkGroupTest.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
Caused by: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -206
Column unknown
WORKGROUPID
At line 1, column 20.
at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:88)
at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:34)
at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:695)
at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:232)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:351)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:73)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:66)
at org.hibernate.id.AbstractPostInsertGenerator.getGenerated(AbstractPostInsertGenerator.java:39)
... 31 more
Name and version of the database you are using: Firebird 1.5
The generated SQL (show_sql=true):
Hibernate: insert into "workgroups" ("version", "name", "description", "isDefault") values (?, ?, ?, ?)
Hibernate: select workgroupId from "workgroups" where "workgroupId" =?