-->
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.  [ 5 posts ] 
Author Message
 Post subject: foreign-key constraint-Name zu lang
PostPosted: Fri Jun 22, 2007 10:26 am 
Newbie

Joined: Fri Jun 22, 2007 9:57 am
Posts: 2
Hallo,
ich habe ein Problem mit den von Hibernate generierten foreign-key-constraints. Einige contraint-Namen sind bei mir 32 Zeichen lang, obwohl Oracle nur 30 Zeichen erlaubt.

Folgende Grob-Struktur mit insgesamt 4 Vererbungs-Hierarchie-Ebenen:

Code:
public abstract class AlleObjekte{
   public Long systemId
   ...
}

(von diesem erben alle Klassen außer "Version", ggfs. über "Zwischenstufen")

Code:
public abstract class VersioniertesObjekt extends AlleObjekte{
   public Version aktuelleVersion;
   ...
}

(von diesem erben alle Klassen, die spezielle Versionierungs-Attribute haben)

Code:
public class Eintrag extends VersioniertesObjekt{
   ...
}

(von dieser Klasse erben alle Einträge)

Code:
public class SpeziellerEintrag extends Eintrag{
   ...
}

(spezialisiert Eintrag)

Außerdem:
Code:
public class Version{
   public Long nummer; // als ID
   ...
}


Hibernate version: 3.2
Name and version of the database you are using:Oracle 9i
Tomcat version: 5.5
Vererbungsstrategie: Table per Class

Funktioniert auch soweit alles prima.

Beim automatischen Erstellen der Datenbank ist der foreign-key-constraint-Name allerdings zwei Zeichen zu lang. Deshalb erscheint folgende Fehlermeldung:
Code:
ERROR SchemaExport:274 - Unsuccessful: alter table spezieller_eintrag add constraint FK8C1E17EBB43E62C9846c66e91bda1ca foreign key (aktuelleVersion_nummer) references version
ERROR SchemaExport:275 - ORA-00972: identifier is too long


Ist es tatsächlich so, dass der constraint-Name mit zunehmender Hierarchietiefe immer größer wird?? Bei einer Ebene weniger hat alles funktioniert. Oder gibt es Möglichkeiten, den Namen zu beeinflussen?? (Wenn ich das richtig im Source-Code verstanden habe wird er zusammengesetzt aus: "FK"+HashWert Tabellennamen + HashWert Spaltennamen).

Viele Grüße,
Michael[/code]


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 25, 2007 3:25 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Hmm genau wegen solchen Sachen mag ich Generatoren nicht. Da schreib ich mir lieber ein SQL-Skript und benenn die FKs manuell.

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


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 25, 2007 5:05 am 
Regular
Regular

Joined: Thu Apr 05, 2007 7:05 am
Posts: 53
Location: Troisdorf, Germany
Ich weiß zwar nicht genau ob es möglich ist, aber eine einfache Lösung wäre es, die erlaubte Zeichenlänge bei der Datenbank zu ändern. So etwas dürfte ja fast in einer Variablen festgelegt sein.

Falls es das nicht gibt oder du nicht an die DB direkt ran kommst, kann ich dir leider nicht weiter helfen.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 25, 2007 5:31 am 
Newbie

Joined: Fri Jun 22, 2007 9:57 am
Posts: 2
Es ist ja auch kein großes Problem, den foreign-key nach Generierung der Datenbank manuell zu setzen.
Mich interessiert an dieser Stelle eher, ob es tatsächlich an der Anzahl der Hierarchiestufen bei der Vererbung liegt, dass der constraint-Name zu lang geworden ist. Bei allen anderen Tabellen (die nicht über vier Ebenen erben) funktioniert es einwandfrei. Oder ist es ein Bug bei Hibernate?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jun 25, 2007 8:00 am 
Regular
Regular

Joined: Thu Apr 05, 2007 7:05 am
Posts: 53
Location: Troisdorf, Germany
Also ich habe die ReverseEngineering Funktion von Hibernate genutzt und weiß daher nicht wie das Ergebnis bei dir genau aussieht.
Allerdings habe ich zum generieren des Schemas ein Tools benutzt (DBDesigner4). Dieser hat die FK's hierarchisch aufgebaut (<Tabellenname>_<PKName>) und für jede weitere Tabelle, über die geerbt oder verwiesen wurde kam ein Tabellenname dazu (<Tabellenname>_<Tabellenname>_<PKName>). Falls das eine Konvention ist und Hibernate das auch macht, liegt das Problem auf der Oracle Seite, die nur 30 Zeichen erlaubt.
Hatte wegen dem Tool das selbe Problem, aber da ich eh erst ein Skript über die CREATE Statements laufen lassen muss, hab ich da eine rename() Funktion eingebaut und das Problem so umgangen.


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