-->
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: [Gelöst] Abfrage über n:m-Beziehung funktioniert nicht
PostPosted: Thu Apr 15, 2010 6:48 am 
Beginner
Beginner

Joined: Sat Oct 18, 2008 10:25 am
Posts: 30
Hallo,

ich habe folgende Situation. Es gibt eine Tabelle SoftwareProduct und eine Tabelle Version. Die beiden sind über eine n:m-Beziehung miteinander verbunden. Um diese zu realisieren, gibt es noch die Tabelle SoftwareRequirements. In SoftwareRequirement stehen nur die Primärschlüssel der beiden anderen Tabellen als Fremdschlüssel. Damit soll abgebildet werden, dass (Programm)-Versionen bestimmte Software als Voraussetzung benötigen.

Jetzt brauche ich eine Abfrage, die alle Softwareprodukte liefert, die noch nicht als Voraussetzung für eine bestimmte Version eingetragen sind.

In MySql scheint folgende Abfrage zu funktionieren: select * from softwareproduct s where s.softwareproductId not in (select softwareproductid_fk from softwarerequirements sr where versionid_fk = 6)

Mit Hibernate habe ich es mit folgender Anweisung versucht:
select s from SoftwareProduct s where s.softwareProductId not in (select vr.softwareProductId from Version v join v.softwareRequirements vr where v.versionId = 6);

Ich bekomme keine Datensätze als Ergebnis. Die Beziehung habe ich folgendermaßen implementiert:

Code:
@Entity
@Table(name = "Version")
public class VersionImpl extends BeanBaseImpl implements Version{
   private int versionId;
   private List<SoftwareProductImpl> softwareRequirements;
   
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   public int getVersionId() {
      return versionId;
   }
   
   public void setVersionId(int versionId) {
      this.versionId = versionId;
   }

        @ManyToMany
   @JoinTable(name = "softwareRequirements", joinColumns = {@JoinColumn(name = "softwareProductId_fk")},
         inverseJoinColumns = {@JoinColumn(name = "versionId_fk")})
   public List<SoftwareProductImpl> getSoftwareRequirements() {
      return softwareRequirements;
   }
   
   public void setSoftwareRequirements(List<SoftwareProductImpl> softwareRequirements) {
      this.softwareRequirements = softwareRequirements;
   }
}

@Entity
@Table (name = "SoftwareProduct")
public class SoftwareProductImpl implements SoftwareProduct{
   private int softwareProductId;

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   public int getSoftwareProductId() {
      return softwareProductId;
   }
   
   public void setSoftwareProductId(int softwareProductId) {
      this.softwareProductId = softwareProductId;
   }
}


Es ist vorerst nur als unidirektionale Beziehung implementiert.

Weiß jemand, warum mir Hibernate keine Datensätze zurückliefert, obwohl ich ganz genau weiß, dass ein Datensatz existiert? Ich habe mit join ein wenig experimentiert und musste feststellen, dass das nie funktioniert. Auch wenn ich die Abfrage ganz einfach stricke, sobald ich mit join auf die n:m-Beziehung zugreifen möchte, erhalte ich kein Ergebnis.

Viele Grüße,

Christopher


Last edited by colbertz on Thu Apr 15, 2010 8:39 am, edited 1 time in total.

Top
 Profile  
 
 Post subject: Re: Abfrage über n:m-Beziehung funktioniert nicht
PostPosted: Thu Apr 15, 2010 8:39 am 
Beginner
Beginner

Joined: Sat Oct 18, 2008 10:25 am
Posts: 30
Okay, ich habe den Fehler selbst gefunden. Ich habe die Schlüsselspaltung bei der ManyToMany-Beziehung vertauscht. Dummer Fehler ...


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.