Fra: Sergey Menis [mailto:[EMAIL PROTECTED]
Sendt: to 03-02-2005 17:21
Til: Max Andersen; hibernate-devel@lists.sourceforge.net
Emne: RE: [Hibernate] Index creation on PK (Hibernate3, Gupta SQL Base)
Max,
Thank you for your reply. It seems I am the only
one, messing with
SQLBase :)
I have partially completed the SQLBaseDialect
and patched the
Configuration in
addition to Dialect class. This works for
my cases so far, yet I have to
tested
it properly. Once I have something
"pretty" I will submit a patch to
CVS.
Are there any predefined test
procedures you have developed for the
Dialects?
Thank
you,
Sergey Menis
-----Original Message-----
From: Max Rydahl
Andersen [mailto:[EMAIL PROTECTED]]
Sent:
Monday, January 31, 2005 7:12 AM
To: Sergey Menis;
hibernate-devel@lists.sourceforge.net
Subject: Re: [Hibernate] Index creation
on PK (Hibernate3, Gupta SQL
Base)
On Mon, 24 Jan 2005 14:42:38 -0500,
Sergey Menis <[EMAIL PROTECTED]>
wrote:
I didn't notice if you
got an answer to this yet - so just ignore me if
otherwise ;)
You are
correct about your need to extend configuration/dialect.
You probably
also need to look at Table.primaryKey and see where it is
used when creating
primary keys.
I also *think* HSQLDialect has the same issues and that it
is not
handled in a good way at the moment (some instanceof
HSQLDialect
somewhere).
Thus you should add something like
"requireAlterTableForPrimaryKey()" or
something to Dialect to handle it more
smoothly.
/max
> All,
>
> I am in the process
of creating a dialect to communicate with Gupta
> SQLbase database.
Currently I am facing a problem of "Table in
> incomplete state".
According to Gupta this problem is caused by a
> missing index on the
primary key. This appears to be correct since
> there are no indexes
created on my table (NOTATION), once the
> SchemaExport runs. I have
tested the same mapping documents and
> identical code on MSSQL Server,
using the provided dialect
> (SQLServerDialect) and there are no problems
with index creation. This
> is due to the fact that indexes on primary
key are created implicitly
> under such DBs as Oracle and MSSQL Server.
Unfortunately this is not
> the case with Gupta SQL Base, where the index
must be created
explicitly. Hence my question:
>
> Since this
problem is DB specific, any ideas on how to incorporate
> functionality to
force explicit index creation on PK, after table
>
generation?
>
> As I understand it I am faced with
extending:
>
> org.hibernate.cfg.Configuration
>
org.hibernate.dialect.Dialect
> + my own dialect
>
> I have
less then a month of exposure with Hibernate so there are
> probably many
misconceptions in the above. Please correct me if you
> see anything
wrong.
>
> Thanks,
>
> Sergei
>
>
************************RELEVANT INFORMATION************** Hibernate
>
version: Hibernate3
>
> Full stack trace of any exception that
occurs:
>
>
> [java] 12:19:02,110 DEBUG SQL:290 - insert into
NOTATION (NOTE, TYPE,
> OWNER_ID, CREATE_DATE) values (?, ?, ?, ?) [java]
Hibernate: insert
> into NOTATION (NOTE, TYPE, OWNER_ID,
>
CREATE_DATE) values (?, ?, ?, ?)
> [java] 12:19:02,110 DEBUG
AbstractBatcher:341 - preparing statement
> [java] 12:19:02,157 DEBUG
JDBCExceptionReporter:49 - SQL Exception
> [java] java.sql.SQLException:
01417 DLU TIC Table in incomplete state
>
> [java] at
>
jdbc.gupta.sqlbase.SqlbaseStatement.SQLException(SqlbaseStatement.java
>
:8
> 26)
> [java] at
>
jdbc.gupta.sqlbase.SqlbasePreparedStatement.<init>(SqlbasePreparedStat
>
em
> ent.java:147)
> [java] at
>
jdbc.gupta.sqlbase.SqlbasePreparedStatement.<init>(SqlbasePreparedStat
>
em
> ent.java:92)
> [java]
at
>
jdbc.gupta.sqlbase.SqlbaseConnection.prepareStatement(SqlbaseConnection.
>
java:195)
> [java]
at
>
org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.
>
java:349)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.ja
>
va
> :71)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.ja
>
va
> :65)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatch
>
er
> .java:125)
> [java] at
>
org.hibernate.persister.BasicEntityPersister.insert(BasicEntityPersist
>
er
> .java:1653)
> [java] at
>
org.hibernate.persister.BasicEntityPersister.insert(BasicEntityPersist
>
er
> .java:2006)
> [java]
at
>
org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:
>
42)
> [java] at
>
org.hibernate.impl.ActionQueue.executeActions(ActionQueue.java:232)
>
[java] at
>
org.hibernate.impl.ActionQueue.executeActions(ActionQueue.java:137)
>
[java] at
>
org.hibernate.event.AbstractFlushingEventListener.performExecutions(Ab
>
st
> ractFlushingEventListener.java:255)
> [java] at
>
org.hibernate.event.DefaultFlushEventListener.onFlush(DefaultFlushEven
>
tL
> istener.java:26)
> [java] at
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:814)
> [java]
at
>
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:
>
75
> )
> [java] at
org.hibernate.auction.Main.createNotation(Main.java:127)
> [java] at
org.hibernate.auction.Main.main(Main.java:425)
> [java] 12:19:02,173 WARN
JDBCExceptionReporter:57 - SQL Error: 0,
> SQLState: null
> [java]
12:19:02,173 ERROR JDBCExceptionReporter:58 - 01417 DLU TIC
> Table in
incomplete state [java] 12:19:02,188 DEBUG
> JDBCExceptionReporter:49 -
could not insert:
> [org.hibernate.auction.Notation] [insert into NOTATION
(NOTE, T YPE,
> OWNER_ID, CREATE_DATE) values (?, ?, ?, ?)] [java]
>
java.sql.SQLException: 01417 DLU TIC Table in incomplete state [java]
>
at
>
jdbc.gupta.sqlbase.SqlbaseStatement.SQLException(SqlbaseStatement.java
>
:8
> 26)
> [java] at
>
jdbc.gupta.sqlbase.SqlbasePreparedStatement.<init>(SqlbasePreparedStat
>
em
> ent.java:147)
> [java] at
>
jdbc.gupta.sqlbase.SqlbasePreparedStatement.<init>(SqlbasePreparedStat
>
em
> ent.java:92)
> [java]
at
>
jdbc.gupta.sqlbase.SqlbaseConnection.prepareStatement(SqlbaseConnection.
>
java:195)
> [java]
at
>
org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.
>
java:349)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.ja
>
va
> :71)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.ja
>
va
> :65)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatch
>
er
> .java:125)
> [java] at
>
org.hibernate.persister.BasicEntityPersister.insert(BasicEntityPersist
>
er
> .java:1653)
> [java] at
>
org.hibernate.persister.BasicEntityPersister.insert(BasicEntityPersist
>
er
> .java:2006)
> [java]
at
>
org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:
>
42)
> [java] at
>
org.hibernate.impl.ActionQueue.executeActions(ActionQueue.java:232)
>
[java] at
>
org.hibernate.impl.ActionQueue.executeActions(ActionQueue.java:137)
>
[java] at
>
org.hibernate.event.AbstractFlushingEventListener.performExecutions(Ab
>
st
> ractFlushingEventListener.java:255)
> [java] at
>
org.hibernate.event.DefaultFlushEventListener.onFlush(DefaultFlushEven
>
tL
> istener.java:26)
> [java] at
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:814)
> [java]
at
>
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:
>
75
> )
> [java] at
org.hibernate.auction.Main.createNotation(Main.java:127)
> [java] at
org.hibernate.auction.Main.main(Main.java:425)
> [java] 12:19:02,282 WARN
JDBCExceptionReporter:57 - SQL Error: 0,
> SQLState: null
> [java]
12:19:02,282 ERROR JDBCExceptionReporter:58 - 01417 DLU TIC
> Table in
incomplete state [java] 12:19:02,282 ERROR
>
AbstractFlushingEventListener:258 - Could not synchronize database
> state
with session [java]
> org.hibernate.exception.GenericJDBCException: could
not insert:
> [org.hibernate.auction.Notation]
> [java] at
>
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(
>
SQ
> LStateConverter.java:82)
> [java] at
>
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.ja
>
va
> :70)
> [java]
at
>
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.
>
java:43)
> [java] at
>
org.hibernate.persister.BasicEntityPersister.insert(BasicEntityPersist
>
er
> .java:1683)
> [java] at
>
org.hibernate.persister.BasicEntityPersister.insert(BasicEntityPersist
>
er
> .java:2006)
> [java]
at
>
org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:
>
42)
> [java] at
>
org.hibernate.impl.ActionQueue.executeActions(ActionQueue.java:232)
>
[java] at
>
org.hibernate.impl.ActionQueue.executeActions(ActionQueue.java:137)
>
[java] at
>
org.hibernate.event.AbstractFlushingEventListener.performExecutions(Ab
>
st
> ractFlushingEventListener.java:255)
> [java] at
>
org.hibernate.event.DefaultFlushEventListener.onFlush(DefaultFlushEven
>
tL
> istener.java:26)
> [java] at
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:814)
> [java]
at
>
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:
>
75
> )
> [java] at
org.hibernate.auction.Main.createNotation(Main.java:127)
> [java] at
org.hibernate.auction.Main.main(Main.java:425)
> [java] Caused by:
java.sql.SQLException: 01417 DLU TIC Table in
> incomplete state [java]
at
>
jdbc.gupta.sqlbase.SqlbaseStatement.SQLException(SqlbaseStatement.java
>
:8
> 26)
> [java] at
>
jdbc.gupta.sqlbase.SqlbasePreparedStatement.<init>(SqlbasePreparedStat
>
em
> ent.java:147)
> [java] at
>
jdbc.gupta.sqlbase.SqlbasePreparedStatement.<init>(SqlbasePreparedStat
>
em
> ent.java:92)
> [java]
at
>
jdbc.gupta.sqlbase.SqlbaseConnection.prepareStatement(SqlbaseConnection.
>
java:195)
> [java]
at
>
org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.
>
java:349)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.ja
>
va
> :71)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.ja
>
va
> :65)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatch
>
er
> .java:125)
> [java] Exception in thread "main"
>
org.hibernate.exception.GenericJDBCException: could not insert:
>
[org.hibernate.auction.Notation]
> [java] at
>
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(
>
SQ
> LStateConverter.java:82)
> [java] at
>
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.ja
>
va
> :70)
> [java]
at
>
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.
>
java:43)
> [java] at
>
org.hibernate.persister.BasicEntityPersister.insert(BasicEntityPersist
>
er
> .java:1683)
> [java] at
>
org.hibernate.persister.BasicEntityPersister.insert(BasicEntityPersist
>
er
> .java:2006)
> [java] at
>
org.hibernate.persister.BasicEntityPersister.insert(BasicEntityPersist
>
er
> .java:1653)
> [java] ... 10 more
> [java] 12:19:02,407
DEBUG JDBCTransaction:99 - rollback [java]
> 12:19:02,423 DEBUG
SessionImpl:363 - transaction completion [java]
> 12:19:02,423 DEBUG
SessionImpl:232 - closing session [java]
> 12:19:02,423 DEBUG
SessionImpl:311 - disconnecting session [java]
> 12:19:02,423 DEBUG
AbstractBatcher:392 - closing JDBC connection (open
>
PreparedStatements: 1, globally: 1) (open ResultSets: 0,
> globally:
0)
> [java] 12:19:02,423 DEBUG DriverManagerConnectionProvider:129
-
> returning connection to pool, pool size: 1 [java] 12:19:02,423
DEBUG
> SessionImpl:363 - transaction completion [java]
at
>
org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:
>
42)
> [java] at
>
org.hibernate.impl.ActionQueue.executeActions(ActionQueue.java:232)
>
[java] at
>
org.hibernate.impl.ActionQueue.executeActions(ActionQueue.java:137)
>
[java] at
>
org.hibernate.event.AbstractFlushingEventListener.performExecutions(Ab
>
st
> ractFlushingEventListener.java:255)
> [java] at
>
org.hibernate.event.DefaultFlushEventListener.onFlush(DefaultFlushEven
>
tL
> istener.java:26)
> [java] at
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:814)
> [java]
at
>
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:
>
75
> )
> [java] at
org.hibernate.auction.Main.createNotation(Main.java:127)
> [java] at
org.hibernate.auction.Main.main(Main.java:425)
> [java] Caused by:
java.sql.SQLException: 01417 DLU TIC Table in
> incomplete state [java]
at
>
jdbc.gupta.sqlbase.SqlbaseStatement.SQLException(SqlbaseStatement.java
>
:8
> 26)
> [java] at
>
jdbc.gupta.sqlbase.SqlbasePreparedStatement.<init>(SqlbasePreparedStat
>
em
> ent.java:147)
> [java] at
>
jdbc.gupta.sqlbase.SqlbasePreparedStatement.<init>(SqlbasePreparedStat
>
em
> ent.java:92)
> [java]
at
>
jdbc.gupta.sqlbase.SqlbaseConnection.prepareStatement(SqlbaseConnection.
>
java:195)
> [java]
at
>
org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.
>
java:349)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.ja
>
va
> :71)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.ja
>
va
> :65)
> [java] at
>
org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatch
>
er
> .java:125)
> [java] at
>
org.hibernate.persister.BasicEntityPersister.insert(BasicEntityPersist
>
er
> .java:1653)
> [java] ... 10 more
>
> BUILD
FAILED
> C:\java\eclipse\workspace\HibernateSQLBase\build.xml:624:
Java
returned:
> 1
>
>
> Name
and version of the database you are using: Gupta SQL Base 7.6.0
>
>
The generated SQL (show_sql=true):
> [java] 12:19:01,751 DEBUG
SchemaExport:154 - create table NOTATION (
> [java] TYPE varchar(2) not
null, [java] OWNER_ID varchar(40) not null,
> [java] CREATE_DATE date
not null, [java] NOTE LONG VARCHAR, [java]
> primary key (TYPE, OWNER_ID,
CREATE_DATE)
> [java]
)
--
Max Rydahl
Andersen
callto://max.rydahl.andersen
Hibernate
[EMAIL PROTECTED]
http://hibernate.org
JBoss
Inc
[EMAIL PROTECTED]
http://jboss.com