-->
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: Primary Key Relation
PostPosted: Sat May 09, 2009 12:54 pm 
Newbie

Joined: Thu Jun 29, 2006 4:54 am
Posts: 1
Hallo zusammen,

nach 6 Stunden recherche und Ausprobieren wende ich mich jetzt vertrauensvoll an euch.
Eigentlich ist die Anforderung sehr simple.
Es gibt eine User-Klasse
Code:
class User {
  private Long id;
  .... properties
}

und eine referenzierende Klasse
Code:
class Product {
  private Long id;
  ... properties
  private User creator;
}


Wenn eine Product-Klasse geladen wird, soll der User gleich gesetzt sein. Ich habe folgendes Mapping (eines von vielen) ausprobiert

Code:
<hibernate-mapping>
    <class name="org.syracus.pimp.scrum.Product" table="PIMP_PRODUCTS"
    dynamic-insert="false" dynamic-update="false" mutable="true"
    optimistic-lock="version" polymorphism="implicit" select-before-update="false">
        <id name="id" column="PRODUCT_ID">
            <generator class="native"/>
        </id>
        <property name="name" column="PRODUCT_NAME"/>
        <property name="description" column="PRODUCT_DESCRIPTION"/>
        <many-to-one name="creator" not-null="false" cascade="delete-orphan">
            <column not-null="false" name="CREATOR_ID"/>
        </many-to-one>
    </class>
</hibernate-mapping>


INSERT, UPDATE und SELECT für Product funktioniert einwandfrei. Nur leider macht mir der erstellte Foreign-Key (product.creator.id -> user.id) beim Löschen von User-Entitäten Probleme. Nach DB-Design ist es ja egtl korrekt, daß ich keinen User löschen können sollte wenn noch eine Referenz auf diesen besteht. Nur leider macht es in der Applikations-Logik keinen Sinn einen User nicht löschen zu dürfen, bloß weil es irgentwann mal ein Product angelegt hat.

Kann es sein, daß ich einfach das falsche Mapping verwende. Gibt es für das Problem überhaupt eine 'deklarative' Lösung im Mapping, oder habe ich hier nur die Möglichkeit das DB-Design manuell zu generieren und entsprechende Native ON DELETEs zu definieren ?

Was ich eben bräuchte wäre sowas wie ein 'loose' Binding von product.creator.id -> user.id.

Für Hilfe und Rat wäre ich echt dankbar.

Grüße
Sebastian


Top
 Profile  
 
 Post subject: Re: Primary Key Relation
PostPosted: Mon May 11, 2009 5:39 am 
Senior
Senior

Joined: Tue Oct 28, 2008 10:39 am
Posts: 196
Sieh dir mal die Kapitel 7.3.2 bzw. 7.5.1 der Referenzdoku an. Im Prinzip hast du doch "nur" eine optional one-to-many/many-to-one-Beziehung. Darf es denn wirklich sein, dass ein Produkt keinen User hat, der es angelegt hat?
Ohne Join-Table geht es hier mMn leider wirklich nicht.


Top
 Profile  
 
 Post subject: Re: Primary Key Relation
PostPosted: Tue May 12, 2009 4:22 am 
Expert
Expert

Joined: Thu Jan 08, 2009 6:16 am
Posts: 661
Location: Germany
Guck mal hier, evtl. kannst du "key column" statt nur "column" benutzen.

_________________
-----------------
Need advanced help? http://www.viada.eu


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.