Note that there are some explanatory texts on larger screens.

plurals
  1. POSpring, Hibernate - TransactionException : Already have an associated managed connection
    primarykey
    data
    text
    <p>I am developping a Spring/Hibernate/Vaadin application and I have a problem that I've not been able to solve despite a lot of research. My application is organized in four layers : model &lt;-> repository &lt;-> service &lt;-> view</p> <p>When I am on my laptop, I don't have any problem when I try to display views of my application. But when I put my application on my preproduction server, people try to access for testing and I have the following error in Tomcat's logs : </p> <pre><code>Caused by: org.springframework.orm.jpa.JpaSystemException: org.hibernate.TransactionException: Already have an associated managed connection; nested exception is javax.persistence.PersistenceException: org.hibernate.TransactionException: Already have an associated managed connection at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:311) at org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect.ajc$afterThrowing$org_springframework_orm_jpa_aspectj_JpaExceptionTranslatorAspect$1$18a1ac9(JpaExceptionTranslatorAspect.aj:15) at com.code.repositories.jpa.SuperRepository.findAll(SuperRepository.java:99) at com.code.service.ActorService.findAllAddressTypes(ActorService.java:103) at com.code.views.vaadin.views.contact.AddressTypeView.buildLayout(AddressTypeView.java:50) at com.code.views.vaadin.layout.objects.CodeView.&lt;init&gt;(CodeView.java:29) at com.code.views.vaadin.views.AbstractEntityView.&lt;init&gt;(AbstractEntityView.java:25) at com.code.views.vaadin.views.contact.AddressTypeView.&lt;init&gt;(AddressTypeView.java:31) ... 65 more Caused by: javax.persistence.PersistenceException: org.hibernate.TransactionException: Already have an associated managed connection at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1360) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1288) at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1370) at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:60) at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.enlistInCurrentTransaction(ExtendedEntityManagerCreator.java:421) at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.doJoinTransaction(ExtendedEntityManagerCreator.java:398) at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:356) at $Proxy285.createNamedQuery(Unknown Source) ... 71 more Caused by: org.hibernate.TransactionException: Already have an associated managed connection at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:65) at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160) at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1309) at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:57) </code></pre> <p>I think the problem comes from the fact that various users try to access the same data, but I am not sure. Did anyone of you have had the same problem ?</p> <p>Thank you.</p> <p>Do not hesitate if you need more code.</p> <p>EDIT</p> <p>Yes I use Spring Security, I inject my repositories in my services. A typical service method is :</p> <p>AddressTypeView</p> <pre><code>@Resource private ActorService actorService; private BeanItemContainer&lt;AddressType&gt; container; private EntityList list; private AddressTypeForm form; /** * Build layout */ public void buildLayout() { super.buildLayout(); container = new BeanItemContainer&lt;AddressType&gt;(AddressType.class); container.addAll(actorService.findAllAddressTypes()); list = new EntityList(); list.addActionHandler(new EntityListActionHandler(this)); list.setContainerDataSource(container); list.setVisibleColumns(AddressType.TABLE_FIELDS); list.setColumnHeaders(list.getColumnHeaders()); form = new AddressTypeForm(container); list.addListener(new ItemClickEvent.ItemClickListener() { private static final long serialVersionUID = 1L; @Override public void itemClick(ItemClickEvent event) { AddressType selected = (AddressType) event.getItemId(); form.setItemDataSource(new BeanItem&lt;AddressType&gt;(selected)); form.setImmediate(true); } }); VerticalSplitPanel panel = new VerticalSplitPanel(); panel.setFirstComponent(list); panel.setSecondComponent(form); getVerticalLayout().addComponent(toolBar); getVerticalLayout().addComponent(panel); getVerticalLayout().setExpandRatio(panel, 1); } </code></pre> <p>ActorService</p> <pre><code>/** * Find all address types * @return */ public List&lt;AddressType&gt; findAllAddressTypes() { return addressTypeRepository.findAll(); } </code></pre> <p>AdressTypeRepository</p> <pre><code>@SuppressWarnings("unchecked") @Override @Transactional public List&lt;T&gt; findAll() { Query query = this.entityManager.createNamedQuery(this.entityClass.getSimpleName() + ".findAll"); return query.getResultList(); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload