Hallo,
ich habe ein Problem bei der Umstellung von Version 2.1 auf Version 3.0 .
In meiner Anwendung habe ich ein "Course"-Objekt. Dieses verfügt über ein Set von "Assessment"-Objekten. Diese haben wiederum ein Set von "Result"-Objekten.
Hier kurz die relevanten Ausschnitte der Mapping Dateien:
Code:
<class
name="de.ifis.orm.beans.usecase1.Course1"
table="usecase1_courses"
>
<id
name="id"
column="id"
type="java.lang.Long"
>
<generator class="native">
</generator>
</id>
<set
name="assessments"
lazy="true"
inverse="true"
cascade="all"
sort="unsorted"
>
<key
column="course"
>
</key>
<one-to-many
class="de.ifis.orm.beans.usecase1.Assessment1"
/>
</set>
...
</class>
Code:
<class
name="de.ifis.orm.beans.usecase1.Assessment1"
table="usecase1_assessments"
>
<id
name="id"
column="id"
type="java.lang.Long"
>
<generator class="native">
</generator>
</id>
<many-to-one
name="course"
class="de.ifis.orm.beans.usecase1.Course1"
cascade="none"
outer-join="auto"
update="true"
insert="true"
column="course"
/>
<set
name="results"
lazy="true"
inverse="true"
cascade="all"
sort="unsorted"
>
<key
column="assessment"
>
</key>
<one-to-many
class="de.ifis.orm.beans.usecase1.Result1"
/>
...
</set>
</class>
Code:
<class
name="de.ifis.orm.beans.usecase1.Result1"
table="usecase1_results"
>
<id
name="id"
column="id"
type="java.lang.Long"
>
<generator class="native">
</generator>
</id>
<many-to-one
name="assessment"
class="de.ifis.orm.beans.usecase1.Assessment1"
cascade="none"
outer-join="auto"
update="true"
insert="true"
column="assessment"
/>
...
</class>
Ich möchte nun alle Course-Objekte haben, die über ein Assessment-Objekt verfügen, das noch keine Result-Objekte hat.
Dazu habe ich folgendes HQL Statement
Code:
SELECT DISTINCT a.course
FROM Assessment1 a
WHERE a.results.size = 0
mit Version 2.1 erhalte ich auch das gewünschte Ergebnis. Dazu wird folgendes SQL-Statement erzeugt:
Code:
select distinct course12_.id as id, course12_.client as client, course12_.name as name
from usecase1_assessments assessment0_, usecase1_courses course12_
where assessment0_.course=course12_.id and
(((select count(*)
from usecase1_results results1_
where assessment0_.id=results1_.assessment)=0 ))
mit Version 3.0 wird folgendes, abgeändertes SQL erzeugt:
Code:
select distinct course1x1_.id as id, course1x1_.client as client1_, course1x1_.name as name1_
from usecase1_assessments assessment0_, usecase1_courses course1x1_, usecase1_results results2_
where assessment0_.id=results2_.assessment
and assessment0_.course=course1x1_.id
and (select count(results2_.assessment)
from usecase1_results results2_
where assessment0_.id=results2_.assessment)=0
Das Ergebnis ist leer.
Kann es sein, dass der Ausdruck
Code:
assessment0_.id=results2_.assessment
nur Assessments für das Ergebnis zulässt, die bereits ein Ergebnis haben, und ich deswegen Assessments ohne Ergebnis gar nicht mehr erhalten kann?
Muss ich bei der Umstellung der Version auf 3.0 was Wichtiges beachten, damit das gleiche HQL wieder das gleiche Ergebnis liefet?
Für Hilfe wäre ich sehr dankbar
Viele Grüße