-->
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: Anfängerfrage
PostPosted: Thu Apr 19, 2007 1:03 pm 
Newbie

Joined: Thu Apr 19, 2007 5:34 am
Posts: 3
Hallo zusammen,

ich bin dabei eine bestehende Datenbankbank Anwendung mit Hibernate umzusetzen. Leider stosse ich im Moment so an meine Grenzen. Ich habe 3 Tabellen welche miteinander verknüpft sind:

KUNDE
ID NAME ...

PREIS
KUNDE.ID ARTIKEL.ID PREIS

ARTIKEL
ID NAME ...
Code:
  ----------        -----------        -----------
|KUNDE     |      |PREIS      |      |ARTIKEL    |
|----------|      |-----------|      |-----------|
|ID        | <--> |KUNDE.ID   |      |NAME       |
|Name      |      |ARTIKEL.ID | <--> |ID         |
  ----------       |PREIS      |       -----------
                    -----------

Mit Eclipse habe ich 3 Mapping Tabellen erzeugt und eine Abfrage auf alle 3 Mapping Tabellen einzeln funktioniert.

Ich möchte nun in einem ersten Schritt zu einem Kunden alle Artikel aus Preisfindung anzeigen mit ARTIKEL.NAME und PREIS.PREIS in einem Resultset.

Leider komme ich hier mit dem Mapping nicht weiter. Das Tutorial "1.3.2. A unidirectional Set-based association" von http://www.hibernate.org/hib_docs/v3/re ... l-firstapp beachtet in meinem Fall nicht den speziellen Kundenpreis.

Kann mir bitte jemand helfen?

Grüße Oliver


Top
 Profile  
 
 Post subject:
PostPosted: Wed May 02, 2007 6:21 am 
Newbie

Joined: Tue Aug 29, 2006 5:03 pm
Posts: 12
Location: Leipzig
Hi, zuerst würde ich aus KUNDE.ID und ARTIKEL.ID -> KUNDE_ID und ARTIKEL_ID machen. Sieht schöner aus.

Dann lad dir einen temorären Kunden k.
Dann frag doch nach "from Preis where KUNDE_ID=k.id"

Dann solltest du alle Preiszuordnungen zum Kunden haben.
Ich hoffe diese semiprofessionelle Antwort kann helfen..

MfG
Heiko


Top
 Profile  
 
 Post subject:
PostPosted: Wed May 02, 2007 8:16 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Poste doch mal bitte Deine 3 Mappings

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


Top
 Profile  
 
 Post subject:
PostPosted: Tue May 08, 2007 10:51 am 
Newbie

Joined: Thu Apr 19, 2007 5:34 am
Posts: 3
Hallo FPC,

hier meine Mappings:
Code:
<hibernate-mapping>
    <class name="com.test.persistance.hibernate.Preis" table="preis" catalog="test">
        <composite-id name="id" class="com.test.persistance.hibernate.preisId">
            <key-property name="kunde" type="java.lang.Integer">
                <column name="kunde" />
            </key-property>
            <key-property name="artikel" type="java.lang.Integer">
                <column name="artikel" />
            </key-property>
        </composite-id>
        <property name="preis" type="java.lang.Float">
            <column name="preis" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

<hibernate-mapping>
    <class name="com.test.persistance.hibernate.Kunde" table="kunde" catalog="test">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" />
        </property>
        ....
    </class>
</hibernate-mapping>

<hibernate-mapping>
    <class name="com.test.persistance.hibernate.Artikel" table="artikel" catalog="test">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" />
        </property>
        ....
    </class>
</hibernate-mapping>


@Heiko danke für den Hinweis, habe ich nur zur veranschaulichung so gemacht, KUNDE.ID = KUNDE usw.

Was deine Abfrage angeht, mache ich bereits:
Code:
from preis where preis.id.kunde= ?
und das funktioniert ja auch. Das Problem:

Ich bekomme als Result nur die ID`s, und möchte doch auch die Namen der Artikel im Result haben.

Also sowas wie
Code:
select * from preis p, artikel a where p.kunde = kunde and artikel.id = preis.artikel;


Aber halt nur mit Hibernate Mappings und nicht SQL.

Gruss Oliver


Top
 Profile  
 
 Post subject:
PostPosted: Tue May 08, 2007 11:04 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Versuch mal statt key-property eine Klasse die den zusammengesetzten Schlüssel abbildet. Damit musst Du zwar noch eine key-Klasse anlegen, aber in dieser sind dann direkt eine Objekte Artikel und Kunde enthalten. Ich ahbe selber solche Mappings und das klappt recht gut.
Ein mögliches Mapping reiche ich Dir nach, habe das gerade nicht vorort bzw. im Kopf.
Der Zugriff sähe dann auf jeden Fall so aus:

preis.getId().getArtikel().getName();
preis.getId().getKunde().getName();

Ich denke das ist es auch was Du erreichen möchtest oder?

Gruß

Fpc

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


Last edited by FPC on Wed May 09, 2007 3:33 am, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Tue May 08, 2007 11:22 am 
Newbie

Joined: Thu Apr 19, 2007 5:34 am
Posts: 3
Hallo FPC,

danke für die prompte Antwort.

FPC wrote:
Versuch mal statt key-property einer die den zusammengesetzten Schlüssel abbildet. Damit musst Du zwar noch eine key-Klasse anlegen, aber in dieser sind dann direkt eine Objekte Artikel und Kunde enthalten.

... das verstehe ich leider nicht.

FPC wrote:
Ich ahbe selber solche Mappings und das klappt recht gut.
Ein mögliches Mapping reiche ich Dir nach, habe das gerade nicht vorort bzw. im Kopf.
Der Zugriff sähe dann auf jeden Fall so aus:

preis.getId().getArtikel().getName();
preis.getId().getKunde().getName();

Ich denke das ist es auch was Du erreichen möchtest oder?


Super, genau das suche ich.

Gruss Oliver


Top
 Profile  
 
 Post subject:
PostPosted: Wed May 09, 2007 3:41 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Hmm bei dem ersten Satz habe ich wieder mal schneller gedacht, als ich schreiben konnte ^^

Also hier wäre schon mal die passende URL aus der Hibernate Doku http://www.hibernate.org/hib_docs/v3/reference/en/html/mapping.html#mapping-declaration-compositeid

Und Dein Mapping in Preis würde dann etwa so aussehen:

Code:
<hibernate-mapping>
    <class name="com.test.persistance.hibernate.Preis" table="preis" catalog="test">
        <composite-id name="id" class="com.test.persistance.hibernate.preisKey">
            <key-many-to-one name="kunde" class="com.test.persistance.hibernate.Kunde" column name="kunde" />
            <key-many-to-one name="artikel" class="com.test.persistance.hibernate.Artikel"  column name="artikel" />
        </composite-id>
        <property name="preis" type="java.lang.Float">
            <column name="preis" not-null="true" />
        </property>
    </class>
</hibernate-mapping>


Das heisst für Dich, Du muss noch eine Klasse preisKey anlegen, die als einzige Attribute Kunde und Artikel enthalten. Dein Konstruktor von Preis muss diese Klasse als Parameter enthalten und in ein entsprechendes Attribut hinterlegen können.

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


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.