Criteria:Warum doppelte Ergebnisse?

Status
Nicht offen für weitere Antworten.

GilbertGrape

Bekanntes Mitglied
Hallo,

Ich bau mir für eine Abfrage ein Criteria zusammen.

Die Funktion sieht ungefähr so aus:
[highlight=Java]public List<UnmodifiedText> getTexts(int from, int max, boolean onlyNewTexts, Order[] orders ){
Criteria crit = getSession().createCriteria(UnmodifiedText.class);
if (onlyNewTexts){
crit.add(Restrictions.or(Restrictions.eq("edited", false), Restrictions.isNull("edited")));
}
for (Order o : orders){
crit.addOrder(o);
}
crit.setFirstResult(from)
.setMaxResults(max);

return crit.list();
}[/highlight]

In der Datenbank sind jetzt in meinem Beispiel 2 Datensätze, die gefunden werden müssen. Er findet diese auch. Allerdings steht einer der beiden dann 10mal in meiner Liste.
Wenn ich stattdessen einen normalen Query baue, ist das nicht der Fall.
Der sieht ungefähr so aus:
[highlight=Java]return getSession().createQuery("from UnmodifiedText u where u.edited=false or u.edited is null order by u.lastUpdate desc, u.id desc")
// return getSession().createQuery("from UnmodifiedText")
.setFirstResult(from)
.setMaxResults(max)
.list();[/highlight]

Kann mir jemand sagen, woran das liegen könnte?

Danke, GG
 

byte

Top Contributor
Lass Dir doch mal das erzeugte SQL anzeigen und poste es. Werden irgendwelche Joins erzeugt?
 
S

SlaterB

Gast
etwas suspekt sind mir die Orders, gehts wenn man die wegläßt?
 

byte

Top Contributor
Ein ResultTransformer sollte das Problem lösen, aber auf jeden Fall mal das SQL angucken:

[HIGHLIGHT="Java"]criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY );[/HIGHLIGHT]
 

GilbertGrape

Bekanntes Mitglied
Ich glaube, ich weiß zumindest woran es liegt.
Ich mach Eager-Loading und dadurch macht er da irgendwelche Kreuz-Produkte.
Wenn ichs auf Lazy setze, funktioniert das, dafür viele andere Sachen nicht :)
Komischerweise tritt das nur mit den Criterias auf (auch ohne Orders).

Ja, ich weiß, dass Eager böse ist, aber ich kriegs irgendwie nicht hin mit Lazy...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben