Query bei n:m-Beziehung mit Hiberante

cuchulainn

Mitglied
Hallo alle zusammen,

in meiner Anwendung gibt es Personen (Person) und Kategorien (Category), die durch eine n:m-Beziehung miteinander verknüpft sind. Zusätzlich gibt es noch Mieter (Lodger). Ldoger ist eine Unterklasse von Person.

Jetzt möchte ich alle Personen herausfinden (können auch Mieter sein), die einer bestimmten Kategorie angehören, z.B. die Kategorie mit CategoryId = 1.

Es gibt definitiv eine Person, auf welche diese Bedingung zutrifft, aber ich erhalte nie ein Ergebnis. Immer bekomme ich null.

Hier die relevanten Teile meiner Dateien.

Person.hbm.xml

Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-lazy="false" auto-import="true">
   <class name="de.waldhausweg7.model.Person" table="Person">
      <id name="personId" type="int">
         <generator class="increment" />
      </id>
      <discriminator column="personType" type="string" force="true" />
      
      <!-- n:m-Beziehung zu Kategorie -->
      <set name="categories" table="person_category" lazy="false">
         <key column="personId" />
         <many-to-many class="de.waldhausweg7.model.Category" column="categoryId" />
      </set>
      
      <!-- Beziehung zu der Unterklasse Lodger -->
      <subclass name="de.waldhausweg7.model.Lodger" discriminator-value="l">
         <property name="extension1" column="extension1" />
         <property name="extension2" column="extension2" />
      </subclass>      
   </class>
</hibernate-mapping>

Category.hbm.xml
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-lazy="false" auto-import="true">
   <class name="de.waldhausweg7.model.Category" table="Category">
      <id name="categoryId" type="int">
         <generator class="increment" />
      </id>
      <property name="categoryName" column="categoryName" />
      <property name="comment" column="comment" />
   </class>   
</hibernate-mapping>

Ich habe alle möglichen Anweisungen versucht, um diese Query durchzuführen. Hier mal einige Beispiele:

Code:
select p from Person p join p.categories c where c.categoryId = 1

select p from Person p, in (p.categories) c where c.categoryId = 1

from Person p, Category c where c.categoryId = ? and c in elements (p.categories)

select p from Person p left join p.categories c where c.categoryId = 1

Ich habe das Internet durchstöbert, bin auf die obigen Möglichkeiten gestoßen und habe alles mal durchprobiert. Immer mit demselben Ergebnis. Meine Person mit categoryId = 1 wird nicht gefunden. In MySql jedoch finde ich sie mit einer einfachen select-Anweisung.

Kann mir jemand erklären, wie das funktioniert?

viele Grüße,

Christopher
 
Ich habe eine Lösung für mein Problem gefunden. Hier ist sie:

select p from Person p join p.categories c where c.categoryId = :categoryId

Möglicherweise hilft das ja jemand anderem noch weiter.
 

Neue Beiträge

Zurück