Ich führe einen Cache von Objekten über Hibernate-Sitzungen hinweg, indem (möglicherweise losgelöste) Objekte in einer Karte gespeichert werden. Wenn der Cache einen Treffer erzielt, teste ich, ob das Objekt bereits Teil der Sitzung mit Session.contains(object)
ist. Wenn nicht, verknüpfe ich es erneut mit Session.lock(object, LockMode.NONE)
.
Das Problem ist, wenn das gleiche Objekt zuvor in der Sitzung geladen wurde, wird eine org.hibernate.NonUniqueObjectException ausgelöst. Bei einer getrennten Instanz sehe ich keine Möglichkeit, im Voraus herauszufinden, ob diese Ausnahme ausgelöst wird, ohne möglicherweise die Datenbank zu treffen.
Es gibt einige Problemumgehungen:
Keines davon ist so sauber wie die Überprüfung der Sitzung im Voraus für eine Objektklasse + ID.
Gibt es eine Möglichkeit, das zu tun?
Ich führe einen Cache von Objekten in Hibernate-Sitzungen
Keine direkte Antwort, aber warum verwenden Sie den Hibernate L2-Cache nicht dafür, das Rad neu zu erfinden?