Problem mit Hibernate Mapping

B

beuschl

hi

habe eine Frage zum Hibernate Mapping (annotations)
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 hat stockid als PK, 2 FKs (userid, productid) und nein zusätzliches attribut "quantity"

Wenn ich jetzt zb ein vorhandenes Stock Object updaten will (habe zb quantity erhöht) bzw ein User objekt uodaten will(weil er ein neues Stock Objekt in sein HashSet bekommen hat) bekomme ich den Fehler: Aktualisieren von ("SS09_DBS1"."STOCK"."USERID") zu NULL nicht möglich
Hibernate will immer folgendes Statement absetzen: update stock set userid=null where userid=?
(wenn man ein User Objekt updaten will)
bzw beim Stock update, setzt er zuerst einen richtigen update Befehl und gleich danach den obigen update Befehl, weshalb ich dann natürlich eine Exception habe

Könnt ihr euch evtl mein Mapping anschaun und mir sagen ob ich irgendwo einen Fehler 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 ich allerdings von einem vorhandenen Stock Objekt die Quantity ä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
 
Zurück