-->
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.  [ 7 posts ] 
Author Message
 Post subject: mapping nicht über primarykey
PostPosted: Wed Sep 28, 2005 7:29 am 
Beginner
Beginner

Joined: Wed Sep 28, 2005 3:29 am
Posts: 20
Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp

Hibernate version:
3.1


Hallo
Ich habe folgendes Problem
Ich habe zwei Tabellen:
Artikel mit dem Primärschlüssel artid
und Rechnungsposition mit dem Primärschlüssel posid

meine Mappings sehen momentan folgendermaßen aus:
Mapping für Rechnungsposition:
<class name="org.intermedien.database.persistence.databaseBeans.Rpos" table="rpos" catalog="omp_intermedien">
<id name="posid" type="long">
<column name="posid" />
<generator class="assigned" />
</id>
<property name="artid" type="long">
<column name="artid"></column>
</property>
<property name="stk" type="float">
<column name="stk" precision="12" scale="0" not-null="true" />
</property>
<property name="ek" type="double">
<column name="ek" precision="22" scale="0" not-null="true" />
</property>
<property name="vk" type="double">
<column name="vk" precision="22" scale="0" not-null="true" />
</property>
<property name="db" type="integer">
<column name="db" />
</property>
<property name="mwst" type="integer">
<column name="mwst" not-null="true" />
</property>
<property name="beschreibung" type="string">
<column name="beschreibung" length="65535" />
</property>
<one-to-one foreign-key="artid" name="artikel"></one-to-one>

</class>

Mapping für Artikel:
<class name="org.intermedien.database.persistence.databaseBeans.Artikel" table="artikel" catalog="omp_intermedien">
<id name="artid" type="long">
<column name="artid" />
<generator class="assigned" />
</id>
<property name="artikelnr" type="string">
<column name="artikelnr" not-null="true" />
</property>
<property name="artikel" type="string">
<column name="artikel" not-null="true" />
</property>
<set name="rechnungsPositionen">
<key column="artid"/>
<one-to-many class="org.intermedien.database.persistence.databaseBeans.Rpos"/>
</set>
</class>


Ich schaffe es nicht, eine one-to-one Verbindung zw. Rechnungsposition (hier gibts das property artid) und Artikel (hier gibts den Primärschlüssel artid) herzustellen.

Bitte um Hilfe

danke


Top
 Profile  
 
 Post subject:
PostPosted: Wed Sep 28, 2005 5:30 pm 
Newbie

Joined: Wed Sep 28, 2005 5:17 pm
Posts: 12
Hallo.

Ich glaube ich hatte das gleiche Problem wie du. Also:

Bei mir gibt es eine Klasse/Tabelle "Release" und eine Tabelle/Klasse "Image". In der Tabelle "Release" gibt es das Attribut "COVER_ID". Dies ist ein Fremdschlüssel, der auf den Primärschlüssel der Tabelle "Image" verweist. Zwischen diesen Tabelleneinträgen besteht eine 1:1 - Beziehung.

Das Mapping geschieht über eine many-to-one Angabe in der Mappingdatei Release.hbm.xml und eine one-to-one Angabe in der Mappingdatei Image.hbm.xml.

Code:
<one-to-one name="release" property-ref="cover" cascade="all"/>


Code:
<many-to-one name="cover" column="cover_id" unique="true" not-null="true" cascade="all"/>


Durch die Angabe unique=true wird erreicht, dass es trotzdem nur einen einzigen Eintrag mit der gleichen ID geben kann, also ist die 1:1 Beziehung richtig abgebildet.

Eine kurze Erklärung gibt es auch hier: (bei diesem Abschnitt ziemlich am Ende)

http://www.hibernate.org/hib_docs/v3/reference/en/html/mapping.html#mapping-declaration-onetoone

Gruß


Top
 Profile  
 
 Post subject:
PostPosted: Wed Sep 28, 2005 5:36 pm 
Newbie

Joined: Wed Sep 28, 2005 5:17 pm
Posts: 12
Schau dir auch mal diesen Thread an. Da geht's um das gleiche Problem:


http://forum.hibernate.org/viewtopic.php?t=945961

Hab ich aber auch gerade erst gesehen!


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 29, 2005 4:11 am 
Beginner
Beginner

Joined: Wed Sep 28, 2005 3:29 am
Posts: 20
Hallo

Danke erstmal für deine Hilfe
Exakt ich habe eigentlich dasselbe Problem :)

Nur das Problem ist bei mir folgendes.
In der Tabelle Rpos ist artid kein Fremdschlüssel auf Artikel (zumindest nicht in der DB definiert).
Ich möchte aber trotzdem über artid auf die Artikel-Tabelle (mit dem Primary-Key artid) verknüpfen.

Jetzt habe ich folgendes mapping in Rpos.hbm.xml hinzugefügt
<many-to-one
name="artikel"
column="artid"
class="org.intermedien.database.persistence.databaseBeans.Artikel"
cascade="all">
</many-to-one>

dann bekomme ich immer folgende Fehlermeldung:
Repeated column in mapping for entity: org.intermedien.database.persistence.databaseBeans.Rpos column: artid (should be mapped with insert="false" update="false")

weiß wer rat?

danke


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 29, 2005 6:56 am 
Expert
Expert

Joined: Tue Oct 05, 2004 9:45 am
Posts: 263
Du hast jetzt 2 Möglichkeiten Werte in die Spalte "artid" einzutragen. Einmal über
1.)
Code:
<property name="artid" type="long">
<column name="artid"></column>
</property>

und einmal über
2.)
Code:
<many-to-one
name="artikel"
column="artid"
class="org.intermedien.database.persistence.databaseBeans.Artikel"
cascade="all">
</many-to-one>


Du hast jetzt 2 Möglichkeiten:
- Die Property-Definition für "artid" aus dem Mapping löschen (wird ja über die "many-to-one" gesetzt)

- bei einem der beiden Mappings das zu tun, was die Fehlermeldung Dir sagt, nämlich "insert=false" und "update=false" zu verwenden.

gtx
curio

P.S.: In wie weit das sinnvoll ist, hab ich mir jetzt aber nicht angekuggt ;-)


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 29, 2005 7:56 am 
Beginner
Beginner

Joined: Wed Sep 28, 2005 3:29 am
Posts: 20
Ok
danke, für dieTips.

Habs jetzt so gelöst, dass ich update und insert beim artid-property auf false gesetzt habe.
Weiters habe ich den setter für die artid auf private gesetzt habe.

So stelle ich sicher, dass updates beim artikel nur direkt über den artikel gemacht werden können.

Die artid bei rpos soll ja auch nur lesend verwendet werden.

danke


Top
 Profile  
 
 Post subject:
PostPosted: Wed Oct 19, 2005 10:22 am 
Beginner
Beginner

Joined: Fri Jul 16, 2004 3:21 am
Posts: 40
Du kannst es auch auf der DB Ebene lösen, in dem du einen ForeinKey machst, dann wird es beim generieren der hbm Files auch gerade richtig gemacht.

gruss pfenn


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