-->
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.  [ 3 posts ] 
Author Message
 Post subject: insert in Tabelle ohne ID angabe
PostPosted: Tue May 15, 2007 1:26 pm 
Newbie

Joined: Wed Apr 25, 2007 6:50 am
Posts: 9
Hallo,

ich möchte ein insert in eine Tabelle machen ohne dafür die ID geben zu müssen, da diese von der Datenbank automatisch kreiert wird.

Bei der mapping File (yxz.hbm.xml) muss ich aber die ID definieren denn ich möchte das es gelesen (select) und upgedated wird....

habe mit <generator class="native"/> versucht, aber da meldet der folgenden Fehler:

Quote:
19:00:49,546 DEBUG SQL:324 - select hibernate_sequence.nextval from dual
19:00:49,609 WARN JDBCExceptionReporter:71 - SQL Error: 2289, SQLState: 42000
19:00:49,609 ERROR JDBCExceptionReporter:72 - ORA-02289: sequence does not exist

19:00:49,625 DEBUG SQLErrorCodeSQLExceptionTranslator:255 - Unable to translate SQLException with errorCode '2289', will now try the fallback translator
19:00:49,625 DEBUG SessionFactoryUtils:785 - Closing Hibernate Session
19:00:49,656 ERROR SeExamplDAOHbnt:100 - attach failed
org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not get next sequence value; bad SQL grammar [select hibernate_sequence.nextval from dual]; nested exception is java.sql.SQLException: ORA-02289: sequence does not exist

java.sql.SQLException: ORA-02289: sequence does not exist

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:810)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1039)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:850)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1134)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3339)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3384)
at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:75)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:85)
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:693)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:690)
at com.yxz.SeExamplDAOHbnt.attachDirty(SeExamplDAOHbnt.java:97)
at com.yxz.logic.AssManager.insertAssignment(AssManager.java:48)


die map Datei:
Code:
<class name="xx.yy.SeExampl" table="SEEXAMPL" schema="SESM">
        <id name="seId" type="long">
            <column name="SE_ID" length="13"/>
            <generator class="native" />
        </id>
    .
    .
    .


Gibt es denn ein Generator, womit man beim select + update die ID bekommt aber beim Insert weggelassen werden kann?

Danke!


Top
 Profile  
 
 Post subject:
PostPosted: Wed May 16, 2007 10:59 am 
Regular
Regular

Joined: Fri May 12, 2006 4:05 am
Posts: 106
Hallo,

eigentlich arbeiten alle Generatoren mit Ausnahme von "assigned" so wie du es beschreibst.
"native" ist immer etwas eigen, da es hier vom verwendeten Dialect abhängt, welche Generator-Klasse dann tatsächlich verwendet wird - in Deinem Fall scheint das "sequence" zu sein.
Nun wäre es interessant, wie die Datenbank die ids generiert - eventuell gibt es da ja auch eine passende Generator-Klasse in hibernate (wir verwenden z.B. "identity").
Ein letzter Strohhalm ist immer "select", weil da die id sicher aus der Datenbank übernommen wird. Hat allerdings den Nachteil, dass man zusätzlich eine eindeutigen Business-Key angeben muss, anhand dessen hibernate den eingefügten Satz im Anschluss auch wieder findet.

Gruß

piet


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 21, 2007 5:33 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Bist Du Dir auch sicher, dass ein entsprechendes AutoIncrement in der DB vorhanden ist. Ich weis jetzt nicht welche Oracle-Version Du nutzt aber zumindest bis zur 9er Version hatte Oracle kein AutoIncrement für PKs. Das musstest Du sonst über eigene Trigger realisieren.

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


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