2009-06-11 4 views
0

Ich habe diese Methode Unterschrift:finden konkrete Klasse einen dynamischen Ausdruck mit (wo eine Klasse Instanz zu einer DAO geben wird)

public int nrOfEntities(Class<? extends MailConfirmation> clazz, User user, String email) 

Ich würde nrOfEntities wie die Anzahl der Einheiten zurückzuversetzen:

  • Are der konkreten Klasse clazz
  • Haben Sie einen passenden Benutzer, wenn der Benutzer! = null
  • Haben Sie eine passende E-Mail, wenn der Benutzer == null

Es ist die Klassenzuordnung, mit der ich ein Problem habe. Ich habe ein paar Aussagen ohne Glück versucht.

Antwort

1

Kann clazz Untertypen haben, die nicht gezählt werden sollten?

Wenn nicht, ist es nicht ausreichend, die Abfrage auf clazz zu erstellen?

Jetzt rate ich, wie Ihre Zuordnung aussieht (dass es "E-Mail" und "Benutzer" -Eigenschaften gibt).

Wenn das nicht funktioniert, weiß ich, dass es eine Pseudo-Eigenschaft namens "Klasse" gibt, zumindest in HQL. Vielleicht kannst du damit experimentieren.

+0

Ah, ausgezeichnet. Ich habe 5 Minuten nach der Pseudo-Eigenschaft gesucht, konnte sie aber nicht finden. Die Verwendung der Kriterien-API war für mich Neuland, funktionierte aber großartig. Vielen Dank! –

0

Wenn Sie die Klasse eines Objekts testen wollen, sollten Sie in der Lage sein, so etwas wie die folgenden verwenden:

Object entity = ... // Get the entity however 
boolean matchesClass = entity.getClass().equals(clazz); 

Wenn dies für Sie nicht funktioniert, geben einige Beispiele dafür, wie es scheitert, da Es sollte so einfach sein!

+0

Natürlich würde das übereinstimmen. Aber ich möchte Hibernate-Entitäten der Klasse clazz holen. –

0

Suchen Sie nach "from " + clazz.getSimpleName() + " where ..."?

+0

Es sollte funktionieren, aber ich bevorzuge die Antwort von Waxwing, da die Verwendung der Criteria-API beim Erstellen dieses Abfragetyps zur Laufzeit gut aussieht. Danke für die Antwort! (Ich habe es natürlich auch upvoted.) –

+0

Richtig, die Kriterien-API ist für diese Art von Abfragen besser als HQL. –

Verwandte Themen