-->
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.  [ 5 posts ] 
Author Message
 Post subject: Zusammengesetzter Fremschlüssel
PostPosted: Thu Feb 09, 2006 10:55 am 
Newbie

Joined: Thu Feb 09, 2006 10:10 am
Posts: 1
Hallo!

Ich habe eine Tabelle mit einem zusammengesetzten Fremdschlüssel. Da in einer anderen Tabelle nur auf einen des Schlüssels referenziere, habe ich nur diesen als Primarykey angegeben und den anderen Teil als einfache Property.
Wenn ich jetzt auf den einen Teil des Primärschlüssels abfrage:
getSession().createQuery("FROM Aktion WHERE AktionPK1="+ aktionPK1)
bekomme ich zwar zwei Objekte zurück (richtigerweise), aber zweimal das selbe.
Nach Debugging bin ich jetzt zu dem Ergebnis gekommen, dass Hibernate die Objekte korrekterweise anhand der PK identifiziert.

Weiß jemand eine Lösung für mein Problem?


Alex.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 10, 2006 5:15 am 
Beginner
Beginner

Joined: Tue Jul 19, 2005 5:08 am
Posts: 26
Location: Germany
dann versuchs mal damit:

"SELECT DISTINCT aktion FROM Aktion WHERE AktionPK1="+ aktionPK1


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 10, 2006 5:16 am 
Beginner
Beginner

Joined: Tue Jul 19, 2005 5:08 am
Posts: 26
Location: Germany
dann versuchs mal damit:

"SELECT DISTINCT aktion FROM Aktion WHERE AktionPK1="+ aktionPK1


Top
 Profile  
 
 Post subject:
PostPosted: Thu Mar 02, 2006 5:29 am 
Beginner
Beginner

Joined: Mon Nov 22, 2004 11:21 am
Posts: 42
Ist die Relation nicht falsch herum? Foreign Keys sollten immer den (ganzen) Primärschlüssel einer anderen Tabelle referenzieren.
Viele Grüße,
Georg

_________________
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25


Top
 Profile  
 
 Post subject: Re: Zusammengesetzter Fremschlüssel
PostPosted: Tue Mar 14, 2006 9:41 am 
Newbie

Joined: Thu Feb 16, 2006 4:16 am
Posts: 17
Location: Austria
Alex2222 wrote:
Hallo!

Ich habe eine Tabelle mit einem zusammengesetzten Fremdschlüssel. Da in einer anderen Tabelle nur auf einen des Schlüssels referenziere, habe ich nur diesen als Primarykey angegeben und den anderen Teil als einfache Property.
Wenn ich jetzt auf den einen Teil des Primärschlüssels abfrage:
getSession().createQuery("FROM Aktion WHERE AktionPK1="+ aktionPK1)
bekomme ich zwar zwei Objekte zurück (richtigerweise), aber zweimal das selbe.
Nach Debugging bin ich jetzt zu dem Ergebnis gekommen, dass Hibernate die Objekte korrekterweise anhand der PK identifiziert.

Weiß jemand eine Lösung für mein Problem?
Alex.


Hallo Alex,

hast du schon einmal etwas von einer Id-Klasse gehört? Wenn nicht hier ein paar Tips:

1.) die Id-Klasse (z.B. PersonId) muss mit @Embeddable annotiert werden und
2.) java.io.Serializable als Interface implementieren.
3.) Die getter-Funktionen müssen genauso annotiert werden wie bisher.

Deine bisher verwendete Klasse musst du wie folgt erweitern:

@Entity(access = AccessType.PROPERTY)
@Table(name = "db_tabelle", schema = "schema_name")
public class Person implements Serializable
{
private PersonId id;

// Constructors

/** default constructor */
public Person()
{
}

/** minimal constructor */
public Person(PersonId id)
{
this.id = id;
}

/** full constructor */
public Person(PersonId id, Integer pkColumn1, String pkColumn2)
{
this.id = id;
this.pkColumn1 = pkColumn1;
this.pkColumn2 = pkColumn2;
}

// Property accessors
@EmbeddedId
@AttributeOverrides( {
@AttributeOverride(name="myDB_pk_column1", column=@Column(name="myDB_pk_column1", unique=false, nullable=false, insertable=true, updatable=true) ),
@AttributeOverride(name="myDB_pk_column2", column=@Column(name="myDB_pk_column1", unique=false, nullable=false, insertable=true, updatable=true, length=1) ) } )

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

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


// weiter mit den üblichen Annotationen

}

Zusätzlich musst du die bisherigen setter/getter auskommentieren, die du jetzt in deiner Id-Klasse verwendest.

Zusätzlich solltest du deine Parameter anders verwenden:
Quote:
WHERE AktionPK1="+ aktionPK1


Code:
Query query = getSession.createQuery("FROM Person p WHERE p.Id.pkColumn1  = :myParam");
query.setParameter("myParam", anyParam);


Hoffentlich hilft dir das weiter.


MfG,
Alex

**********************
credits nicht vergessen ;-)


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