-->
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.  [ 8 posts ] 
Author Message
 Post subject: Mehrwertiger Primärschlüssel (hibernate synchronizer)
PostPosted: Thu Jul 21, 2005 4:32 am 
Beginner
Beginner

Joined: Wed Jul 20, 2005 2:57 pm
Posts: 28
Hallo,

folgendes Problem:
Tabelle projekt (mit PK ProjektID)
Tabelle klasse (mit PK KlassenName, FKProjektID)

bin ziemlich ratlos wie ich die beiden Primärschlüssel (Klassenname und FKProjektID) in der Tabelle Klasse in java setzen kann.

Mein Mapping für Tabelle klasse sieht so aus (generiert durch Hibernate Synchronizer aus der existierenden Tabellenstruktur der DB):

...
<joined-subclass name="Klasse" table "klasse" extends="Projekt">
<key column="fk_projektid">
<key column="name">
...dann kommen die restlichen Spalten für die Tabelle klasse

1.) Ist das Mapping so korrekt?
2.) Muss das eventuell nicht eine composite ID sein?
3.) Was genau ist eine CompositeID? aus mehreren Attributen zusammengesetzter Primärschlüssel?

Danke für Eure Hilfe!

Viele Grüße,
Kurt


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 21, 2005 1:39 pm 
Beginner
Beginner

Joined: Tue Oct 26, 2004 8:14 am
Posts: 20
Location: Mainz, Germany
Quote:
Was genau ist eine CompositeID? aus mehreren Attributen zusammengesetzter Primärschlüssel?


Richtig.

Du hast in dem Fall eine eigene Klasse, die die CompositeID abbildet.
Also eine Klasse KlassePK, die enthält dann die Spalte Name und die Assoziation auf Projekt.

Die Klasse "Klasse" hat dann ein Property PK vom Typ KlassePK.

Das Mapping dazu kann dann ungefähr so aus aussehen:


Code:
<composite-id
            name="pk"
            class="KlassePK"
        >

              <key-many-to-one
                  name="key1"
                  class="local.entity2"
                  column="TYPE"
              />
               
</composite-id>
[/code][/quote]


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 21, 2005 1:42 pm 
Beginner
Beginner

Joined: Tue Oct 26, 2004 8:14 am
Posts: 20
Location: Mainz, Germany
Sorry war noch nicht fertig, habe aber submitted ;) ( kommt vom TAB drücken )

Code:
<composite-id
            name="pk"
            class="KlassePK"
        >
           <key-property
                  name="name"
                  type="java.lang.String"
                  column="name"
          />

              <key-many-to-one
                  name="projekt"
                  class="Projekt"
                  column="projektid"
              />
</composite-id>


So ungefähr sollte es aussehen.

Die joined-subclass habe ich noch nicht verwendet.

Gruss,

Matthias


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jul 21, 2005 3:27 pm 
Beginner
Beginner

Joined: Wed Jul 20, 2005 2:57 pm
Posts: 28
Hallo Matthias,

danke erst mal. Das Problem wäre gelöst. :-)) Hatte vorher versucht mir das MappingFile mit dem Hibernate Synchronizer aus der Tabellenstruktur herleiten zu lassen. Leider hat er aber versagt. ...oder mit meinen Tabellen stimmt was nicht. Ich werds rausfinden...

Viele Grüße,
Christian


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 22, 2005 3:05 am 
Beginner
Beginner

Joined: Wed Jul 20, 2005 2:57 pm
Posts: 28
Hi,

leider klemmt es schon wieder. Ich hab das Problem, dass mir nicht genau klar ist wie ich den oben genannten zusammengesetzten Primärschlüssel nicht setzen kann. Es wird immer eine Exception geworfen: net.sf.hibernate.MappingException: Unknown entity class: model.genDAO.Xclass Ich habs mal wie folgt probiert:

Code:
try {
_RootDAO.initialize();

XpackageDAO xpdao = new XpackageDAO();
XclassDAO dao = new XclassDAO();
Xclass xc = new Xclass();
XclassPK pk = new XclassPK();

pk.setName(xclass.getName());
pk.setPackage(xpdao.get(packageID));

Transaction tx = dao.beginTransaction(dao.getSession());

xc.setIsabstract(xclass.isAbstract());
xc.setIsinterface(xclass.isInterface());
dao.save(xc); // <-- hier wird die Exception geworfen

} catch (HibernateException e) {
e.printStackTrace();
...


Meine Mappingdatei für xclass sieht so aus:
Code:
<hibernate-mapping package="model.genDAO">
<class
name="Xclass"
table="xclass"
>
<composite-id name="PK" class="XclassPK">
<key-property
name="name"
column="name"
type="string"
/>
<key-many-to-one
name="package"
class="Xpackage"
column="package"
/>
</composite-id>

<property
...
</class>
</hibernate-mapping>


Wenn mir da jemand einen Tip geben kann wie das geht oder einen Link mit Beispiel posten kann(sofern das in dem Forum erlaubt bist) wäre mir sehr geholfen.

Viele Grüße,
Kurt


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 22, 2005 10:51 am 
Beginner
Beginner

Joined: Wed Jul 20, 2005 2:57 pm
Posts: 28
Entschuldigung, ich meine natürlich wie ich den mehrwertigen Schlüssel setzen kann (nicht nicht setzen kann) ... hab beim letzen Posting wohl schon halb gepennt. ;)

Gruß. Kurt


Top
 Profile  
 
 Post subject:
PostPosted: Sat Jul 23, 2005 8:39 am 
Beginner
Beginner

Joined: Tue Oct 26, 2004 8:14 am
Posts: 20
Location: Mainz, Germany
Quote:
net.sf.hibernate.MappingException: Unknown entity class: model.genDAO.Xclass

Heisst, dass deine hbm.xml Datei zur Klasse entweder fehlerhaft ist, dann müsste aber bei der Initialisierung bereits ein Fehler kommen oder die Mapping Datei ist in der Konfigurationsdatei nicht eingetragen.
Ansonsten fehlt in deinem Code Beispiel noch die Zuweisung des PKs.

Code:
Xclass xc = new Xclass();
XclassPK pk = new XclassPK();

pk.setName(xclass.getName());
pk.setPackage(xpdao.get(packageID));

// PK setzen
xc.setPk(pk);
...


Aber wie gesagt die Fehlermeldung besagt ja, dass Hibernate die Xclass gar nicht kennt.

Funktionieren den andere Hibernate-Entitäten bzw. ist generell mit der Hibernate-Konfiguration alles korrekt ?

Hier nochmal ein Link zur Doku der Session Konfiguration:

http://www.hibernate.org/hib_docs/v3/reference/en/html/session-configuration.html


Gruss,

Matthias


Top
 Profile  
 
 Post subject:
PostPosted: Mon Jul 25, 2005 8:44 am 
Beginner
Beginner

Joined: Wed Jul 20, 2005 2:57 pm
Posts: 28
Danke. Es funktioniert jetzt. :) Ich bin so dumm... Hatte die Mappingdatei in der Hibernateconfig auskommentiert.

Viele Grüße,
Kurt


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