Hi!
Ich habe folgendes Problem, ich habe in einem Objekt (Typ) ein Set angelegt und den mehrere(0 .. n) Einträge (Lektoren) stehen. das Eintragen dieser Lektoren klappt auch wunderbar mittels des Hibernate-Generic-DAO (
http://code.google.com/p/hibernate-generic-dao/). Nun versuche ich einen Typ zu finden der genau die ausgewählten Lektoren hält. Dies geschieht bei dem Framework mittels einer Filter Klasse die einem Search-Objekt mitgegeben wird, dieses Verfahren ist analog zu dem mit Criterias die direkt über die Session angesprochen werden (Habe ich versucht selber Fehler). Daher bin ich der Meinung, dass mein Mapping nicht in Ordnung sein kann.
Hier die Typ.hmb.xml (nicht verwirren lassen Uebersetzer & Dolmetscher funktionieren genau wie der Lektor, wurden aber aus der Fragestellung aus Vereinfachungsgründen gestrichen)
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">
<!-- Generated 03.11.2011 19:23:24 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping default-lazy="false">
<class name="core.models.typ.Typ" table="TYP">
<id access="field" name="ID" type="int">
<column name="ID"/>
<generator class="increment"/>
</id>
<set name="mitarbeiter" sort="unsorted" table="MITARBEITER">
<key>
<column name="ID"/>
</key>
<one-to-many class="core.models.Mitarbeiter"/>
</set>
<set cascade="all" name="uebersetzungen" sort="unsorted" table="TYP_UEBERSETZUNGEN">
<key column="TYP_ID"/>
<many-to-many class="core.models.sprache.Uebersetzung"
column="UEBERSETZUNG_ID" unique="true"/>
</set>
<set cascade="all" name="lektorat" sort="unsorted" table="TYP_LEKTORAT">
<key column="TYP_ID"/>
<many-to-many class="core.models.sprache.Lektorat"
column="LEKTOREN_ID" unique="true"/>
</set>
<set cascade="all" name="dolmetscher" sort="unsorted" table="TYP_DOLMETSCHER">
<key column="TYP_ID"/>
<many-to-many class="core.models.sprache.Dolmetscher"
column="DOLMETSCHER_ID" unique="true"/>
</set>
</class>
</hibernate-mapping>
und hier die Lektorat.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">
<!-- Generated 18.11.2011 19:59:00 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping default-lazy="false">
<class name="core.models.sprache.Lektorat" table="LEKTORAT">
<id name="id" type="int">
<column name="ID"/>
<generator class="increment"/>
</id>
<many-to-one cascade="all" class="core.models.sprache.Sprache"
fetch="join" name="sprache">
<column name="SPRACHE"/>
</many-to-one>
<property generated="never" lazy="false" name="vereidigt" type="yes_no">
<column name="VEREIDIGT"/>
</property>
</class>
</hibernate-mapping>
Das heißt bildlich gesprochen, dass ein Lektor über die Assoziations-Tabelle TYP_LEKTORAT mit seinem zugehörigen Typen verbunden ist.
Das das mit den default-lazy-loading nicht die feine Englische Art ist weiß ich auch, aber wurde erstmal aus Bequemlichkeit eingeführt :-)
Wenn ich jetzt versuche die Suche laufen zu lassen bekomme ich folgendes SQL Query
Code:
select typ0_.ID as ID6_ from TYP typ0_, TYP_LEKTORAT lektorat1_, LEKTORAT lektorat2_ where typ0_.ID=lektorat1_.TYP_ID and lektorat1_.LEKTOREN_ID=lektorat2_.ID and .=?
Woher stammt das
Quote:
.=?
?
Das diesen Fehler verursacht
Code:
java.sql.SQLSyntaxErrorException: Syntax error: Encountered "." at line 1, column 164.
Da der Lektor ja noch ein Sprachen-Objekt hält müsste er ja jetzt nur noch die Sprache auf Identität überprüfen, tut dies aber nicht, wieso?
Würde mich über eine Antwort sehr freuen, da ich echt fest stecke.
Gruß Dennis