-->
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.  [ 1 post ] 
Author Message
 Post subject: Hibernate Duplicate Entry (Beziehungstabelle unbefüllt)
PostPosted: Fri Oct 14, 2011 6:39 am 
Newbie

Joined: Fri Oct 14, 2011 6:31 am
Posts: 1
Hallo zusammen,

da ich jetzt schon länger suche und noch immer keine Lösung für mein Problem gefunden habe versuche ich es einfach mal hier.

Zur Problemstellung (vereinfacht):

Ich habe ein XML-File mit Nachrichten bestehend aus Headline, Datum und Anbieter.
Eine Nachricht kann mehrere Anbieter haben.
Ein Anbieter wiederum kann mehreren Nachrichten zugeordnet werden.
Meine Aufgabe ist es die Daten vom XML-File in die Datenbank zu buchen.

Einfügen in die Tabellen funktioniert. Die Beziehungstabelle wird auch befüllt. Das Problem bei der ganzen sache ist nur, dass die Beziehungstabelle nicht befüllt wird, wenn der Anbieter bereits in der Datenbank existiert. Vermutlich weil kein Autoincrement der id erfolgt und diese somit auch nicht zurückgeliefert wird.
Kann ich Hibernate irgendwie sagen, dass er sich die id eines Anbieters holen soll falls der Insert wegen eines Duplicate Entrys nicht ausgeführt werden kann und dann die Beziehungstabelle mit diesem Wert befüllt?

Ich bedanke mich schon mal für alle eventuellen Antworten.
Buchempfehlungen und Blogeinträge zu dem Thema sind natürlich herzlich willkommen.

LG

Fabian

Die Tabellen in Mysql sind folgendermaßen aufgebaut:

Tabelle: news
Spalte: id (Primärschlüssel)
Spalte: headline
Spalte: datum

Tabelle: news_anbieter (Verbindungstabelle)
Spalte: n_id (ID aus Tabelle news)
Spalte: a_id (ID aus Tabelle anbieter)

Tabelle: anbieter
Spalte: id (Primärschlüssel)
Spalte: name (Unique)

Ich hab mir nach dem Vorbild die Mapping files zusammengebaut:
http://www.torsten-horn.de/techdocs/java-hibernate.htm

Code:
<hibernate-mapping>
    <class name="nachrichten.entity.News" table="news" catalog="portal_nachrichten_fa">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="headline" type="string">
            <column name="headline" length="200" not-null="true" />
        </property>
        <property name="date" type="timestamp">
            <column name="date" length="19" />
        </property>
        <set name="anbieter" table="news_anbieter" lazy="true">
      <key column="N_ID"/>
      <many-to-many class="nachrichten.entity.Anbieter" column="A_ID"/>
    </set>
    </class>
</hibernate-mapping>


Code:
<hibernate-mapping>
    <class name="nachrichten.entity.Anbieter" table="anbieter" catalog="portal_nachrichten_fa">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="name" type="string">
            <column name="name" length="50" unique="true" />
        </property>
         <set name="news" table="news_anbieter" lazy="true">
      <key column="A_ID"/>
      <many-to-many class="nachrichten.entity.News" column="N_ID"/>
    </set>
    </class>
</hibernate-mapping>


POJOs

Code:
public class Anbieter implements java.io.Serializable
{

    private Integer id;
    private String name;
    private Set news = new HashSet();

    public Anbieter()
    {
    }

    public Anbieter(String name)
    {
        this.name = name;
    }

    public Integer getId()
    {
        return this.id;
    }

    public void setId(Integer id)
    {
        this.id = id;
    }

    public String getName()
    {
        return this.name;
    }

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

    public Set getNews()
    {
        return this.news;
    }

    public void setNews(Set news)
    {
        this.news = news;
    }
}


Code:
public class News implements java.io.Serializable
{

    private Integer id;
    private String headline;
    private Date date;
    private Set anbieter = new HashSet();

    public News()
    {
    }

    public News(String headline)
    {
        this.headline = headline;
    }

    public News(String headline, Date date)
    {
        this.headline = headline;
        this.date = date;
    }

    public Integer getId()
    {
        return this.id;
    }

    public void setId(Integer id)
    {
        this.id = id;
    }

    public String getHeadline()
    {
        return this.headline;
    }

    public void setHeadline(String headline)
    {
        this.headline = headline;
    }

    public Date getDate()
    {
        return this.date;
    }

    public void setDate(Date date)
    {
        this.date = date;
    }

    public Set getAnbieter()
    {
        return this.anbieter;
    }

    public void setAnbieter(Set anbieter)
    {
        this.anbieter = anbieter;
    }
}


Code zum Einfügen:

Code:
public static void insert()
    {
        Session sess = null;
        try
        {
            sess = HibernateUtil.getSessionFactory().openSession();;
            Transaction tx = sess.beginTransaction();
           
            News news = new News();
            news.setHeadline("Zufallszahl: " + Math.random() * 50);
            news.setDate(new Date());
           
            Anbieter anbieter1 = new Anbieter("anbieter1"); 
            anbieter1.getNews().add(news);
            news.getAnbieter().add(anbieter1);
           
            sess.saveOrUpdate(news);
            sess.saveOrUpdate(anbieter1);

            tx.commit();
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
        finally
        {
            sess.close();
        }
    }


Ich benutze NetBeans 7.0 auf einem Windows XP Rechner


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

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.