-->
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.  [ 2 posts ] 
Author Message
 Post subject: Mapping einer ManyToMany-Beziehung erzeugt keine Daten in DB
PostPosted: Thu Dec 03, 2009 5:44 am 
Newbie

Joined: Thu Dec 03, 2009 5:36 am
Posts: 4
Location: Ulm - Germany
Hallo,
ich haben in einem Projekt ein Problem mit einer Viele-zu-Viele - Beziehung, welche wie folgt realisiert wurde:
Bauteil-Klasse:
Code:
package logik.ticket;

import java.io.Serializable;
import java.util.List;
import javax.persistence.*;

/**
*
* @author Benedikt Eberhardinger
*/
@Entity
@Table(name="Bauteil")
public class Bauteil implements Serializable {

    @Id
    @Column(name="Bauteil_ID")
    private int bauteil_ID;
    @Column(name="Name")
    private String name;
    @Column(name="Kategorie")
    private String kategorie;
    @Column(name="NochErhaeltlich")
    private boolean nochErhaeltlich;
    @Column(name="Preis")
    private double preis;
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(
        name="Bauteil_Produkt",
        joinColumns=@JoinColumn(name="Bauteil_ID"),
        inverseJoinColumns=@JoinColumn(name="Produkt_ID")
    )
    private List<Produkt> produkte;

    public Bauteil() {
    }

    public Bauteil(int bauteil_ID, String name, String kategorie, boolean nochErhaeltlich, double preis, List<Produkt> produkte) {
        this.bauteil_ID = bauteil_ID;
        this.name = name;
        this.kategorie = kategorie;
        this.nochErhaeltlich = nochErhaeltlich;
        this.preis = preis;
        this.produkte = produkte;
    }

    public List<Produkt> getProdukte() {
        return produkte;
    }

    public void setProdukte(List<Produkt> produkte) {
        this.produkte = produkte;
    }

    public int getBauteil_ID() {
        return bauteil_ID;
    }

    public void setBauteil_ID(int bauteil_ID) {
        this.bauteil_ID = bauteil_ID;
    }

    public String getKategorie() {
        return kategorie;
    }

    public void setKategorie(String kategorie) {
        this.kategorie = kategorie;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isNochErhaetlich() {
        return nochErhaeltlich;
    }

    public void setNochErhaetlich(boolean nochErhaeltlich) {
        this.nochErhaeltlich = nochErhaeltlich;
    }

    public double getPreis() {
        return preis;
    }

    public void setPreis(double preis) {
        this.preis = preis;
    }

}

Produkt-Klasse:
Code:
package logik.ticket;

import java.io.Serializable;
import java.util.List;
import javax.persistence.*;

/**
*
* @author Benedikt Eberhardinger
*/
@Entity
@Table(name="Produkt")
public class Produkt implements Serializable {

    @ManyToMany(mappedBy="produkte")
    List<Bauteil> bauteile;
    @Id
    @Column(name="Produkt_ID")
    private int produkt_id;
    @Column(name="Name")
    private String name;
    @Column(name="Kategorie")
    private String kategorie;
    @Column(name="VerkaufsDatum")
    private String verkaufsDatum;
    @Column(name="NochErhaeltlich")
    private boolean nochErhaeltlich;

    public Produkt() {
    }

    public Produkt(List<Bauteil> bauteile, int produkt_id, String name, String kategorie, String verkaufsDatum, boolean nochErhaeltlich) {
        this.bauteile = bauteile;
        this.produkt_id = produkt_id;
        this.name = name;
        this.kategorie = kategorie;
        this.verkaufsDatum = verkaufsDatum;
        this.nochErhaeltlich = nochErhaeltlich;
    }

    public List<Bauteil> getBauteile() {
        return bauteile;
    }

    public boolean isNochErhaeltlich() {
        return nochErhaeltlich;
    }

    public void setNochErhaeltlich(boolean nochErhaeltlich) {
        this.nochErhaeltlich = nochErhaeltlich;
    }

    public void setBauteile(List<Bauteil> bauteile) {
        this.bauteile = bauteile;
    }

    public String getKategorie() {
        return kategorie;
    }

    public void setKategorie(String kategorie) {
        this.kategorie = kategorie;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getProdukt_id() {
        return produkt_id;
    }

    public void setProdukt_id(int produkt_id) {
        this.produkt_id = produkt_id;
    }

    public String getVerkaufsDatum() {
        return verkaufsDatum;
    }

    public void setVerkaufsDatum(String verkaufsDatum) {
        this.verkaufsDatum = verkaufsDatum;
    }

}

Ich bekommen vom Hibernate-Framework beim auführen folgender JUnit keine Fehler:
Code:
@Test
    public void speichernTestProdukt() {
        System.out.println("Test speichern Produkt");
        Data<Produkt> data_pr = new Data<Produkt>();
        Data<Bauteil> data_bt = new Data<Bauteil>();
        Bauteil bauteil6 = data_bt.finden(6, Bauteil.class);
        //List<Bauteil> bauteile = new LinkedList<Bauteil>();
       
        Produkt produkt3 = data_pr.finden(3, Produkt.class);
        List<Bauteil> bauteile = produkt3.getBauteile();
        for (Bauteil bt : produkt3.getBauteile()) {
            System.out.println(bt.getName());
        }
        bauteile.add(bauteil6);
        for (Bauteil bt : produkt3.getBauteile()) {
            System.out.println(bt.getName());
        }
        data_pr.speichern(produkt3);
}

Die Data-Klasse aggiert im Projekt als Fassade für das Hibernate-Framework.
Allerdings ist das neu angelegte Bauteil beim wieder aufrufen (über die finde()-Mehtode) nicht mehr vorhanden und es werden in der Zwischen-Tabelle auch keine neuen Daten vorhanden.

Ich würde mich freuen, wenn mir hier jemand weiterhelfen kann.


Top
 Profile  
 
 Post subject: Re: Mapping einer ManyToMany-Beziehung erzeugt keine Daten in DB
PostPosted: Mon Dec 07, 2009 8:02 am 
Newbie

Joined: Thu Dec 03, 2009 5:36 am
Posts: 4
Location: Ulm - Germany
Ich konnte das Problem mit Hilfe des Buches "Java-Persistence-API mit Hibernate" (erschienen im Addison-Wesley Verlag, ISBN: 978-3-8273-2537-2; ein sehr empfehlenswertertes Buch!) lösen.
Das Problem lag darin, dass die Join-Columns case-senestive ausgelegt sind und deshalb die Zuordnung zu Datenbank nicht richtig ausgeführt werden konnte. Zusätzlich dazu ist es der Einfachkeit halber sinnvoll eine add()-Methode einzuführen, welche in die Liste des eigenen und des verlinkten Objekt die Daten einträgt. Um die Daten hier in die List-Variablen speichern zu können müssen die Variablen bei Deklaration inizalisiert werden (ich haben hier eine LinkedList verwendet).

Ich hoffe, dass ich hiermit auch anderen mit dem selben oder ähnlichen Problemen weiterhelfen kann.


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