合并实体时的TransactionRequiredException

时间:2016-12-01 12:42:11

标签: jpa eclipselink

在我正在构建的应用程序中,我从数据库加载数据,将其显示在p:dataGrid中,用户可以在其中编辑某些值。编辑完成后,用户将点击" Save"按钮,它将编辑的值存储在数据库中。

我写了一个工作正常的解决方案,但经过一些重新发布和/或服务器重启后,我开始在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 :(得分:0)

如果具有此类设置,则在perisistence.xml <persistence-unit name="MyPU" transaction-type="JTA">和应用程序服务器数据源中启用JTA。