-->
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.  [ 13 posts ] 
Author Message
 Post subject: problem mit primary keys für oracle8
PostPosted: Thu Jul 14, 2005 6:10 am 
Newbie

Joined: Thu Jul 14, 2005 5:43 am
Posts: 8
kann mir jemand helfen?

ich benutze hibernate2.1.8 und will auf eine oracle8.1.7 zugreifen.
dazu stehen mir nur die jdbc-treiber im ojdbc14.jar zur verfügung.

im prinzip funktioniert alles wunderbar; Abfragen und Updates funktionieren ohne Probleme, nur sobald ich einen neuen Eintrag in die db einfügen will gibt es probleme:

es werden ungültige primary keys in die tabellen eingefügt.
die sehen dann so aus:
0.000000000000000000000000000000000000000000000000000012...

selbst wenn ich sie manuell angebe à la "session.save(object, int);" bekomme ich dieses ergebnis.

!!!wenn ich allerdings classes-12.zip benutze funktioniert alles!!!

scheint also am jdbc-treiber zu liegen... allerdings kann es doch nicht sein,daß die treiber im ojdbc14.jar, die zwar für oracle9er-datenbanken bestimmt sind, aber doch abwärtskompatibel sein sollen, das einzige problem sind?!?
andere anwendungen greifen auch ohne probleme mittels ojdbc14.jar auf diese oracle8-db zu.
es besteht keine möglichkeit einen anderen jdbc-treiber zu benutzen. ich muß mit dem ojdbc14.jar klarkommen.

hat schon jemand dieses problem gehabt?
lösungsvorschläge?

vielen dank!


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 14, 2005 11:07 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Verwende niemals Oracle JDBC Treiber, sondern investiere in die DataDirect Oracle Treiber. Solltest du doch Oracle Treiber nehmen muessen, stelle sicher dass du den allerneuesten hast, fuer Oracle 10irgendwas, von der Webseite. Der geht (angeblich) auch mit aelteren Server-Versionen und hat (hoffentlich) weniger Bugs. Ansonsten direkt an Oracle wenden wenn du das Problem in plain JDBC reproduzieren kannst und den Support den du fuer das teure Produkt verdient hast ausnutzen.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 15, 2005 6:32 am 
Newbie

Joined: Thu Jul 14, 2005 5:43 am
Posts: 8
danke für die antwort, aber ich denke es liegt doch an hibernate:

ich habe nun den gleichen treiber, der mir mit hibernate diese probleme bereitet, nun mal ohne hibernate aber auf der gleichen datenbank getestet. da funktioniert alles ohne probleme. liegt also nicht am treiber. denke hibernate macht da das problem. lohnt es sich auf hibernate3 umzusteigen ?


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 15, 2005 6:42 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Nein, solange du nicht ein Minimum an Eigeninitiative in die Fehlersuche steckst liegt es garantiert nicht an Hibernate und ein Upgrade bringt natuerlich nix. Warum nichtmal die Schritte befolgen die hier in "Before Posting" genannt sind: http://www.hibernate.org/ForumMailingli ... AskForHelp


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 15, 2005 9:19 am 
Newbie

Joined: Thu Jul 14, 2005 5:43 am
Posts: 8
vielen dank für die hilfe. auf sowas wär ich ja nie gekommen


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 15, 2005 9:36 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Ja, denn anscheinend hast du bis jetzt weder das Log ausprobiert, noch ein Interesse daran zu wissen was genau vor sich geht, sprich Isolation des Problems. Oder wenn du das schon gemacht hast sagst du es hier keinem, laesst also Leute raten was denn jetzt dein Problem sein koennte. Die Schuld bei der Software suchen ist natuerlich recht einfach. Das alles ist nicht besonders... ergebnisorientiert.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 15, 2005 10:13 am 
Newbie

Joined: Thu Jul 14, 2005 5:43 am
Posts: 8
ok, dann beschreib ich jetzt nochmal genauer was mein problem ist.

ich versuche auf folgende weise ein object in meine oracle 8.1.7 einzufügen:

(...)
try {
net.sf.hibernate.Transaction tx = session.beginTransaction();
//INSERT
if (integrationImpl.getId() == 0) {
logger.info("generated id : "+session.save(integrationImpl));
} else
//UPDATE
session.update(integrationImpl);
tx.commit();
logger.info("insertIntegration completed");
return true;
} catch (Exception e) {
e.printStackTrace();
logger.error("insertIntegration failed");
return false;
}
(...)

das mapping hierzu:

<hibernate-mapping default-cascade="none">
<class name="de.deka.webmethods.webmrepo.persistence.IntegrationImpl" table="INTEGRATION" dynamic-insert="false" dynamic-update="false">

<id name="id" type="int" column="ID" unsaved-value="0">
<generator class="sequence">
<param name="sequence">INTEGRATION_SEQ</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="NAME" not-null="false" unique="false"
sql-type="VARCHAR2(255)"/>
</property>
(...)


output sieht daraufhin so aus (ich benutze eine sequence zur pk-generierungwie man sieht) :

(...)
Hibernate: select INTEGRATION_SEQ.nextval from dual
INFO (EditServiceBeanImpl.java:103) - generated id :126
Hibernate: insert into INTEGRATION (NAME, PROBLEM_DOMAIN, STATUS, VERSION, DESCRIPTION, DESCRIPTION_SHORT, OWNER, CONTACT, INSERT_DATE, INSERT_USER, UPDATE_DATE, UPDATE_USER, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) INFO (EditServiceBeanImpl.java:108) - insertIntegration completed
(...)

so, habe ich nun classes12.jar in meinem classpath -> kein problem, der generierte primary key (hier 126) ist eingefügt.
benutze ich jedoch ojdbc14.jar (und das muß ich, da nur ojdbc14.jar auf dem server liegt, auf dem die anwendung laufen soll) finde ich einen kryptischen primary-key anstatt '126' (meist eine zahl mit scheinbar unendlich vielen nachkommazahlen).

daraufhin habe ich einfach mal versucht ebenfalls über die gleiche treiber-version, allerdings ohne hibernate zu benutzen, etwas in diese tabelle einzufügen, was ohne probleme funktioniert hat.
daher meine (eventuell auch nicht gerechtfertigte) vermutung, das problem läge an hibernate2.1.8...

ich habe schon ziemlich viel im internet nach diesem problem gesucht, aber leider wenig gefunden. ich meine in diesem forum mal einen beitrag gelesen zu haben, in dem jemand das gleiche problem hatte (finde es aber nicht mehr). da wurde das problem allerdings durch den austausch von ojdbc14.jar durch classes12.zip gelöst wurde, was bei mir leider nicht geht.
montag versuche ich das ganze mit einer oracle9er-db zu benutzen.
trotz allem muß es aber letztendlich auf einer oracle 8.1.7 laufen...

würde mich über konstruktive hilfe freuen.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 15, 2005 10:15 am 
Newbie

Joined: Thu Jul 14, 2005 5:43 am
Posts: 8
[quote="sarah_n"]ok, dann beschreib ich jetzt nochmal genauer was mein problem ist.

ich versuche auf folgende weise ein object in meine oracle 8.1.7 einzufügen:

(...)
try {
net.sf.hibernate.Transaction tx = session.beginTransaction();
//INSERT
if (integrationImpl.getId() == 0) {
logger.info("generated id : "+session.save(integrationImpl));
} else
//UPDATE
session.update(integrationImpl);
tx.commit();
logger.info("insertIntegration completed");
return true;
} catch (Exception e) {
e.printStackTrace();
logger.error("insertIntegration failed");
return false;
}
(...)

das mapping hierzu:

<hibernate-mapping default-cascade="none">
<class name="de.deka.webmethods.webmrepo.persistence.IntegrationImpl" table="INTEGRATION" dynamic-insert="false" dynamic-update="false">

<id name="id" type="int" column="ID" unsaved-value="0">
<generator class="sequence">
<param name="sequence">INTEGRATION_SEQ</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="NAME" not-null="false" unique="false"
sql-type="VARCHAR2(255)"/>
</property>
(...)


output sieht daraufhin so aus (ich benutze eine sequence zur pk-generierungwie man sieht) :

(...)
Hibernate: select INTEGRATION_SEQ.nextval from dual
INFO (EditServiceBeanImpl.java:103) - generated id :126
Hibernate: insert into INTEGRATION (NAME, PROBLEM_DOMAIN, STATUS, VERSION, DESCRIPTION, DESCRIPTION_SHORT, OWNER, CONTACT, INSERT_DATE, INSERT_USER, UPDATE_DATE, UPDATE_USER, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
INFO (EditServiceBeanImpl.java:108) - insertIntegration completed
(...)

so, habe ich nun classes12.jar in meinem classpath -> kein problem, der generierte primary key (hier 126) ist eingefügt.
benutze ich jedoch ojdbc14.jar (und das muß ich, da nur ojdbc14.jar auf dem server liegt, auf dem die anwendung laufen soll) finde ich einen kryptischen primary-key anstatt '126' (meist eine zahl mit scheinbar unendlich vielen nachkommazahlen).

daraufhin habe ich einfach mal versucht ebenfalls über die gleiche treiber-version, allerdings ohne hibernate zu benutzen, etwas in diese tabelle einzufügen, was ohne probleme funktioniert hat.
daher meine (eventuell auch nicht gerechtfertigte) vermutung, das problem läge an hibernate2.1.8...

ich habe schon ziemlich viel im internet nach diesem problem gesucht, aber leider wenig gefunden. ich meine in diesem forum mal einen beitrag gelesen zu haben, in dem jemand das gleiche problem hatte (finde es aber nicht mehr). da wurde das problem allerdings durch den austausch von ojdbc14.jar durch classes12.zip gelöst wurde, was bei mir leider nicht geht.
montag versuche ich das ganze mit einer oracle9er-db zu benutzen.
trotz allem muß es aber letztendlich auf einer oracle 8.1.7 laufen...

würde mich über konstruktive hilfe freuen.[/quote]


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 15, 2005 10:17 am 
Newbie

Joined: Thu Jul 14, 2005 5:43 am
Posts: 8
oh, verzeihung!


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 15, 2005 10:31 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Code:

(...)
try {
net.sf.hibernate.Transaction tx = session.beginTransaction();
//INSERT
if (integrationImpl.getId() == 0) {
logger.info("generated id : "+session.save(integrationImpl));
} else
//UPDATE
session.update(integrationImpl);
tx.commit();
logger.info("insertIntegration completed");
return true;
} catch (Exception e) {
e.printStackTrace();
logger.error("insertIntegration failed");
return false;
}


Das ist ueberfluessiger Code, einfach session.saveOrUpdate(integrationImpl) verwenden und im Mapping fuer die <id> das unsaved-value="0" Attribut setzen (ist ja schon gemacht).

Sollte genau diese Sequenz...

Code:
Hibernate: select INTEGRATION_SEQ.nextval from dual
INFO (EditServiceBeanImpl.java:103) - generated id :126
Hibernate: insert into INTEGRATION (NAME, PROBLEM_DOMAIN, STATUS, VERSION, DESCRIPTION, DESCRIPTION_SHORT, OWNER, CONTACT, INSERT_DATE, INSERT_USER, UPDATE_DATE, UPDATE_USER, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)


mit dem gleichen Treiber auf der gleichen Datenbank mit einfachen JDBC calls funktionieren, waere das sehr erstaunlich, denn genau das ist es was Hibernate ausfuehrt. Wenn du den Loglevel hochstellst siehst du zusaetzlich wie die Argumente an die ? gebunden werden. Genau so musst Du JDBC ausfuehren um das Problem zu isolieren, mit den gleichen Parametern und Argumenten.

Mit 99%iger Wahrscheinlichkeit liegt es am Treiber und du musst diesen austauschen, egal ob das geht oder nicht geht. So gehts ja offensichtlich auch nicht...


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jul 17, 2005 7:09 am 
Beginner
Beginner

Joined: Tue Oct 26, 2004 8:14 am
Posts: 20
Location: Mainz, Germany
Hi,

das Problem liegt auf jeden Fall am JDBC Treiber. Ich hatte das Problem auch. Ebenfalls ne 8.1.7er Oracle. Das Problem liegt interessanterweise an den Date-Einträgen im Insert. Wenn Du diese zum Testen rausnimmst wird dein Insert funktionieren. Der Fehler ist auch ohne Hibernate reproduzierbar.

Konnte das Problem mit dem aktuellen JDBC-Treiber für den installierten Client (9er Client) beheben.


Gruss,

Matthias


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jul 19, 2005 10:30 am 
Newbie

Joined: Thu Jul 14, 2005 5:43 am
Posts: 8
tatsächlich, daran liegt es!
tausend dank!
jetzt muß ich mal überlegen, wie ich die date-einträge trotzdem in die datenbank bekomme.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jul 19, 2005 10:50 am 
Newbie

Joined: Thu Jul 14, 2005 5:43 am
Posts: 8
nochmal vielen dank.
das ganze liegt daran, dass in oracle9i DATE zu TIMESTAMP geändert wurde, nicht wahr!?
ich löse das problem jetzt, in dem ich erst ein INSERT ohne DATE-einträge machen und in der gleichen transaktion nochmal ein UPDATE um die zugehörigen DATE-Einträge nachzuliefern. das funktioniert nun endlich.
beim UPDATE bekomme ich nämlich keine probleme.
ist vielleicht nicht ganz so sauber, aber wie gesagt, den treiber kann ich nicht austauschen.


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