2016-12-01 6 views
0

В приложении, которое я создаю, я загружаю данные из базы данных, отображая их в p:dataGrid, где Пользователь может редактировать некоторые значения. После редактирования пользователь нажмет кнопку «Сохранить», которая сохранит отредактированные значения в базе данных.TransactionRequiredException при объединении объекта

Я написал решение, которое работало нормально, но после нескольких переиздает и/или перезагрузки сервера я начал получать TransactionRequiredException с при myEntityFacade.edit(item) в методе saveAction().

В View.xhtml:

<p:dataGrid id="itemGrid" var="item" 
    value="#{myController.itemList}" columns="6" 
    layout="grid" style="width:100%"> 
    <p:panel style="text-align:center;width:100%"> 
     <!-- Displaying data --> 
    </p:panel> 
</p:dataGrid> 

<p:commandButton value="Save" id="saveBtn" 
    action="#{myController.saveAction}" 
    styleClass="ui-priority-primary" /> 

В MyController.java:

@ManagedBean(name = "myController") 
@SessionScoped 
public class MyController { 

    @Inject 
    private MyEntityFacade myEntityFacade; 
    private List<MyEntity> itemList; 

    ... Constructor and other member declarations 

    @PostConstruct 
    public void init() { 
     itemList = myEntityFacade.findAll(); 
    } 

    public void saveAction() { 
     for(MyEntity item : itemList) { 
      myEntityFacade.edit(item); 
     } 
    } 

    ... Getters and Setters 

} 

В MyEntityFacade.java:

@Stateless 
public class MyEntityFacade { 

    @PersistenceContext(unitName = "MyPU") 
    private EntityManager em; 

    public List<MyEntity> findAll() { 
     CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); 
     cq.select(cq.from(MyEntity.class)); 
     return em.createQuery(cq).getResultList(); 
    } 

    public void edit(MyEntity entity) { 
     em.merge(entity); 
    } 
} 

Могу ли я с помощью PrimeFaces и/или JPA, как они должны быть использованы? Что может быть причиной TransactionRequiredException?

Дополнительная информация:

  • PrimeFaces 5,3
  • JPA 2,0
  • Glassfish 4,1 (запускается с NetBeans 8.2)
  • .war файл построен с использованием Maven
+1

и где ваши транзакции? –

+0

Вставить код, в котором вы сохраняете отредактированные объекты. –

+1

Операция @Neil запускается контейнером при входе в метод Stateles EJB. –

ответ

0

Включить JTA в perisistence.xml <persistence-unit name="MyPU" transaction-type="JTA"> и в приложении server datasource тоже, если он имеет такую ​​настройку.

+0

Это уже существует. – Thiefster

+0

Проверьте, создает ли стеклянную фату операцию JTA в EJB –