В приложении, которое я создаю, я загружаю данные из базы данных, отображая их в 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
и где ваши транзакции? –
Вставить код, в котором вы сохраняете отредактированные объекты. –
Операция @Neil запускается контейнером при входе в метод Stateles EJB. –