java - Propagation.REQUIRES_NEW seems to not work -
using spring (mvc, batch, , persistence) have following piece of interface defined:
public interface jobstatusservice { @transactional(readonly = false) @modifying jobstatus save(jobstatus status); @transactional(readonly = true, propagation = propagation.requires_new) optional<jobstatus> get(resultsidentifier identifier); }
note requires_new
it's on broken method.
this interface implemented in:
@override public jobstatus save(jobstatus status) { if (status.getuserid() == null) { status.setuserid(userservice.getcurrentuser()); } status.setlastupdatetime(new date()); return repository.save(status); } @override public optional<jobstatus> get(resultsidentifier identifier) { return repository.findbyjobidentifier(identifier); }
where repository jpa repository following:
public interface jobstatusrepository extends repository<jobstatus, resultsidentifier> { jobstatus save(jobstatus status); optional<jobstatus> findbyjobidentifier(resultsidentifier id); }
resultsidentifier
simple compound id class of string code , id number.
elsewhere, have batch writer finishing out writing jobstatus repository, , web controller class runs loop containing query job status service. save()
operation seems execute correctly, , get()
operation works right the first time.
however, if first run of loop calls get()
, jobstatus isn't "complete" on subsequent runs still not "complete". , in fact same exact object comes hibernate (which persistence tool under hood). what's happening session cache in sessionimpl
/statefulpersistencecontext
keeping copy of , returning instead of doing real database query. so, figured, propagation = propagation.requires_new
should start new transaction/session, right? same problem recurs whether include in annotation or not.
are life-cycles of session , transaction not coterminous here? if not, how can tell spring want start new session? i'm trying avoid changing xml configs push hibernate session factory jobstatusservice implementation , manually clear()
it, no other part of system sees hibernate directly.
i'm happy hear suggestions debugging session-related stuff, given in code it's magic annotation.
i "solved" setting fetch eager on particular entity definition. doesn't seem should work, put in this question inquire might have happened.
Comments
Post a Comment