Hallo,
ich habe mal eine grundsätzliche Frage.
Nach einem Session#getTransaction()#rollback haben ja alle Objekte, die im
Cache der Session hängen, nicht mehr den richtigen Stand.
Ich habe nun folgendes Construct gebaut.
SessionImpl sessionImpl = (SessionImpl)getSession();
rollbackedInstances = new HashSet();
rollbackedInstances.addAll(sessionImpl.getPersistenceContext().getEntitiesByKey()
.values());
sessionImpl.getTransaction().rollback();
und nach einem Neubeginn:
getSession().beginTransaction();
if(rollbackedInstances != null)
{
for(Iterator iter = rollbackedInstances.iterator(); iter.hasNext();)
{
Object instance = iter.next();
getSession().refresh(instance);
rollbackedInstances = null;
}
}
Es funktioniert, aber würde trotzdem mal gerne Eure Meinung hören.
Ist das jetzt ein schlimmer Hack, weil z.B. nicht gegen Session sondern
gegen SessionImpl programmiert wurde?
Man könnte mit einem ähnlichen Verfahren vielleicht die Tatsache umgehen, daß nach einer Exception eine Session unbrauchbar ist.
Dazu holt man sich nach einer Exception mit dem selben Verfahren die
Objekte der kaputten Session, macht sie transient, eröffnet eine neue
Session und übernimmt die alten Objekte mittels Session#update (oder
so) in die neue Session.
Sagt mal bitte Eure Meinung dazu.
Ciao
Peter Schütt
|