-->
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: Hibernate Mapping Frage (Annotations)
PostPosted: Fri Nov 27, 2009 8:49 am 
Newbie

Joined: Fri Nov 27, 2009 8:46 am
Posts: 5
hi
habe eine Frage zum Hibernate Mapping
und zwar habe ich folgende Tabellen auf der Datenbank: Person - Stock - Product
person tabelle hat personid als PK
product tabelle hat product id als PK
und Stock halt zusammengesetzten PK aus personid/productid

das ganze zu mappen ist jetzt nicht so sehr das problem und hab ich schon geschafft. Allerdings hat meine Stock tabelle noch eine Zusatzspalte namens "quantity" (gibt an wie viele Einheiten von einem Produkt der Person gehört). Ich hab aber keine ahnung wie ich das ganze jetzt mit dieser Zusatzspalte mappen soll!

Bitte um Hilfe


Top
 Profile  
 
 Post subject: Re: Hibernate Mapping Frage (Annotations)
PostPosted: Thu Dec 03, 2009 9:19 am 
Expert
Expert

Joined: Thu Jan 08, 2009 6:16 am
Posts: 661
Location: Germany
Hast du Stock denn nicht als Entity gemappt? Dann sollte es kein Problem sein, einfach ein Attribut zuzufügen.

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


Top
 Profile  
 
 Post subject: Re: Hibernate Mapping Frage (Annotations)
PostPosted: Fri Dec 04, 2009 2:31 am 
Senior
Senior

Joined: Tue Oct 28, 2008 10:39 am
Posts: 196
Du könntest zwei one-to-many-Beziehungen mappen. (Ich gehe mal davon aus, dass du bisher eine many-to-many-Beziehung hast.)

Es gibt noch zwei Wege, wie du zusätzliche Felder in einer many-to-many-Beziehung definieren kannst. Falls du Zugriff auf "Java Persistence with Hibernate" hast, findest du das ab Seite 303 beschrieben. Hier: viewtopic.php?f=10&t=990062 gibts einen Link auf eine Seite mit Beispielen.
Beide Wege haben Vor- und Nachteile, daher finde ich die Lösung mit zwei one-to-many gang schön. (Das bißchen Tipparbeit...)


Top
 Profile  
 
 Post subject: Re: Hibernate Mapping Frage (Annotations)
PostPosted: Fri Dec 04, 2009 3:03 am 
Newbie

Joined: Fri Nov 27, 2009 8:46 am
Posts: 5
hi

danke für die tipps.. ich hab mich nun für einen anderen weg entschieden,, und zwar aht die zwischentabelle Stock jetzt eine StockId, 2 FKs (Userid , Productid) und 1 Attriut Quantity

Von der idee würd das eigentlich funktionieren, nur hab ich imemr wieder massive Probleme wenn ich ein stock objekt pdaten will bzw ein User objekt updaten will
Bekomme imemr den Fehler: Aktualisieren von ("SS09_DBS1"."STOCK"."USERID") zu NULL nicht möglich
und Hibernate will imemr folgendes Statement absetzen: update stock set userid=null where userid=?
was mir echt nicht einleutet!

Köntn ihr euch evtl mein Mapping anschaun und mir sagen ob ich einen Fehler irgendwo habe?

Code:
@Entity
@Table(name= "person")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int userid;

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    @JoinColumn(name="userid")
    private Set<Stock> userStock = new HashSet<Stock>();  // Stock Zwischentabelle   


Code:

@Entity
@Table(name= "stock")
public class Stock {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int stockid;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="userid")
    private User user;

    @OneToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
    @JoinColumn(name="productid")
    private Product product;    // Welches Product
    private int quantity;       // Wieviel davon


Wenn ich jetzt zb ein neues Stock Objekt erzeuge und das mit Werten ausfülle (also ihm ein Product und einen user zuweise) und dann NEU in die Datenbank einfüge funktioniert es. Wenn ih allerdings von einem vorhandenen Stock Objekt die QWuantity ändere und es nur updaten will, kommt der oben genannte Fehler

So zb will ich das Stock objekt updaten
Code:
Stock stock = new Stock(p, 1); // p = ein product objekt
         stock.setUser(u); // u = ein User objekt

    session.update(stock);  // stock update
                                    stocklist.add(stock);  // stock objekt zu einer HashSet hinzufügen
                                     u.setUserStock(stocklist);  // neue HashSet liste dem Use rzuordnen
                                     session.update(u);    // User updaten


Top
 Profile  
 
 Post subject: Re: Hibernate Mapping Frage (Annotations)
PostPosted: Sat Dec 05, 2009 1:44 pm 
Newbie

Joined: Fri Nov 27, 2009 8:46 am
Posts: 5
keiner eine idee? komem wirklich nicht weiter


Top
 Profile  
 
 Post subject: Re: Hibernate Mapping Frage (Annotations)
PostPosted: Mon Dec 07, 2009 2:24 am 
Senior
Senior

Joined: Tue Oct 28, 2008 10:39 am
Posts: 196
Du hast im Prinzip zwei Verbindungen gemappt anstatt einer. Eine der Seiten muss als "Besitzer" der Beziehung benannt werden. Ansonsten generiert Hibernate zwei Statements.

In deinem Fall würde ich die User-Seite ändern und dort

Code:
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="user")


verwenden.

Außerdem solltest du darauf achten, dass du beide Seiten der Assoziation pflegst. Also z.b. so:

Code:
product.setUser(this);
userStock.add(product);


Dazu bietet sich eine (eher zwei) weitere Methode in User an, die Products zum User hinzufügt, bzw. wegnimmt.


Top
 Profile  
 
 Post subject: Re: Hibernate Mapping Frage (Annotations)
PostPosted: Mon Dec 07, 2009 9:04 am 
Newbie

Joined: Fri Nov 27, 2009 8:46 am
Posts: 5
danke für den hinweis.

das Programm führt den code jetzt richtig aus und das commit() der Transaktion geht auch durch ohne Fehler
Hibernate erzeugt auch das richtige Statement: update stock set productid=?, quantity=?, userid=? where stockid=?

das problem ist aber, dass die änderung der quantity NICHT in die datenbank übernommen werden! ich weiss leider absolut nicht warum (da ja alles ohne Fehler und mit richtigem SQL statement abgesetzt wird)

jemand eine Idee?


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.