# Wie behandelt oder wo fängt man z.B. NoResultException ab.



## navino (29. Jan 2012)

Hallo,

ich stelle gerade eine Webanwendung von Hibernate auf JPA um, und stelle mir gerade die Frage was ich mit Exceptions vom Typ NoResultException oder generell mit Exceptions mache.

Habe also den klassischen Aufbau von Service und einer DAO Klasse.

@Override
public User getUser(String username, String password) {
try{
Query q = em.createQuery ("from User u where u.username = :username and u.password= assword");
q.setParameter("username",username);
q.setParameter("password",password);
return (User)q.getSingleResult();
}catch(NoResultException nre){
return null;
}
}

Wie mache ich das am Besten?

Gruß
navino


----------



## HimBromBeere (29. Jan 2012)

Du kannst entweder deinen Code so lassen und musst dann in der aufrufenden Funktion prüfen, ob der Rückgabewert null war, oder du wirfst die Exception einfach weiter  Aber irgendwann musst du sie mal verarbeiten...


----------



## Gast2 (29. Jan 2012)

Hier mal ein älteres Thema
http://www.java-forum.org/data-tier/90493-exception-handling-hibernate-jpa.html


----------



## DerFeivel (30. Jan 2012)

Die NoResultException einfach weiter zu werfen, ist nicht wirklich im Sinne eines DAO. Schließlich kapselt ein DAO ja alle Datenquellenzugriff-spezifischen Details, und hierzu gehört eine JPA-Exception.

@TO:

Ist der Code-Ausschnitt da aus deiner DAO-Klasse ? (nächste mal kannste auch, mal das Symbol mit der Java-Tasse anklicken, da wirds dann auch schick formatiert  )

An und für sich würde ich den betreffenden Quelltext so lassen.

Die anderen Möglichkeiten die du m.M. nach hast sind:


Kapseln in eigene Exception
Verwenden des NullObject-Patterns

welche ich hier nicht passend finde.
Das Kapseln in eine Exception des DAO ist hier wohl nicht angebracht, da das 'Nicht-Vorhandensein' eines Users durchaus zu erwarten sind, also keine Ausnahme darstellt.

Genauso wenig macht meiner Ansicht nach, die Verwendung eines Null/Defaults-Objekt bei dieser Methode(wenn sie denn dafür gedacht ist, wofür ich es vermute) hier Sinn. Wenn keine User zur angegebenen Name-Passwort-Kombination gefunden werden konnte, sollte die Applikation auch nicht weitermachen.


----------

