Dies ist eine spezifische Version von this question.
Ich möchte überprüfen, ob ich eine doppelte Zeile einfügen. Soll ich es überprüfen programmatisch in meiner Anwendungsschicht:Logik: Datenbank oder Anwendung/2 (Constraints check)
if (exists(obj))
{
throw new DuplicateObjectException();
}
HibernateSessionFactory.getSession().save(obj);
oder sollte ich die Ausnahme von der Datenbank-Ebene geworfen zu fangen und dann ausgelöst, wenn ich die contraint verletzen?
try
{
HibernateSessionFactory.getSession().save(obj);
}
catch(ConstraintViolationException e)
{
throw new DuplicateObjectException();
}
EDIT: Mit anderen Worten: wenn die Einschränkung gibt es zu bleiben (es ist gut, Datenbank-Design wie auch immer, und ich kann meine app wird die einzige Zugriff auf die Tabelle nicht sicher sein) soll ich vertrauen auf die Bedingung und behandeln die Ausnahme ihre Verletzung erhöht, oder ich sollte besser überprüfen?
EDIT2: Natürlich I + prüfe einfügen innerhalb einer Transaktion, Sperren der Tabelle kein anderer Prozess, um sicherzustellen, einen weiteren Rekord in der Zwischenzeit