<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">Hi all, please can you help me with this, its driving me crazy! <div><br></div><div>I&#39;m experiencing the following exception: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)</div>
<div><br></div><div>It seems this exception is being thrown on the completion of the &#39;getNextJobForDevice&#39; method outlined below. From what I can tell it seems that the when the implicit transaction for the &#39;jobFacadeLocal.print(job, device)&#39; device is committed, we can no longer use any entities that were updated in this transaction. </div>
<div><br></div><div>I&#39;ve tried to refresh the object from the database after this transaction. I&#39;ve tried using the entityManager.refresh() mehtod to do this, but it seems to return the entity without any changes committed from the &#39;jobFacadeLocal.print(job, device)&#39; method. I don&#39;t quite understand this since I&#39;m expecting the changes to have committed as this stage.</div>
<div><br></div><div>I&#39;ve also tried to remove the implicit transaction on the &#39;getNextJobForDevice&#39; method, by placing a &#39;@TransactionAttribute(TransactionAttributeType.NEVER)&#39; on it. This however does not help since we get a new exception: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role</div>
<div>I tried to counter this exception by calling &#39;Hibernate.initialize()&#39;, but then I got this exception: org.hibernate.HibernateException: collection is not associated with any session</div><div><br></div><div>I&#39;d greatly appreciate some help on this, thank you for your time in advance.</div>
<div><br></div><div>Regards</div><div>Drayton</div><div><br></div><div><div>@Stateless</div><div>@WebService</div><div>public class Spooler implements SpoolerLocal {</div><div><br></div></div><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div>...</div><div><br></div><div>public Job getNextJobForDevice(String deviceName) throws SpoolerException {</div><div><br></div></div></blockquote><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div>...</div><div><br></div><div>jobFacadeLocal.print(job, device);</div><div><br></div><div>// I have tried refreshing the job entity here, but the refresh returns a job entity as it was before the &#39;jobFacadeLocal.print(job, device)&#39;</div>
<div><br></div><div>//The code here should only execute if the transaction above has not been rolled back.</div><div><br></div><div>jobFacadeLocal.update(job);</div><div><br></div><div>...</div><div><br></div><div>return job;</div>
</div></blockquote></blockquote><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div>}</div></div></blockquote>}<br><div><br></div><div><br></div><div><div>@Stateless</div><div>public class JobFacade extends Base&lt;Job&gt; implements JobFacadeLocal {</div><div><br></div></div><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div>...</div><div><div>@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)</div><div>public void print(Job job, Device device) throws BankException, LocationException, JobException, StateException  {</div><div>
<br></div></div></div></blockquote><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div><div>...</div><div><br></div><div>jobFacadeLocal.update(job);</div><div><br></div><div>...</div></div></div></blockquote></blockquote><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
<div><div><div>}</div></div></div></blockquote><div><div>}</div></div></span>