简体   繁体   English

更新/删除查询中的javax.persistence.TransactionRequiredException

[英]javax.persistence.TransactionRequiredException in update/delete query

I am working on a simple application where the records of users in a database are displayed in a primefaces datatable and the user can edit or delete the records. 我正在一个简单的应用程序上,该数据库中的用户记录显示在primefaces数据表中,用户可以编辑或删除记录。 Here is the jsf file 这是jsf文件

<h:form>
            <p:dataTable var="user" value="#{userBean.users}" >
                <p:column headerText="username">
                    <h:inputText value="#{user.username}" rendered="#{userBean.editable}" />
                    <h:outputText value="#{user.username}" rendered="#{not userBean.editable}" />
                    <!--<h:outputText value="#{user.username}" />-->
                </p:column>

                <p:column headerText="edit">
                    <h:commandLink value="Edit" action="#{userBean.editAction(index)}" rendered="#{not userBean.editable}" />
                </p:column>

                <p:column headerText="save">
                    <p:commandButton value="Save" id="save" disabled="false" action="#{userBean.saveAction(user)}"/>
                </p:column>

                <p:column headerText="delete">
                    <p:commandButton value="Delete" id="delete" disabled="false" action="#{userBean.deleteAction(user)}"/>
                </p:column>

            </p:dataTable>

        </h:form>

and here is the save and update action methods i am calling in the bean 这是我在Bean中调用的保存和更新操作方法

public String saveAction(User user) {

    this.setEditable(false);
    DB db = new DB();
    db.updateUser(user);
    return "editSuccess";
}

public String deleteAction(User user) {

    DB db = new DB();
    db.deleteUser(user);
    return "editSuccess";
}

and here are the methods in the dao layer 这是dao层中的方法

EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("RegisterationFormJPAPU");
EntityManager em = emf.createEntityManager();
public void updateUser(User user) {
    Query query = em.createQuery("update User set username = :uname where username = :uname");
    query.setParameter("uname", user.getUsername());
    query.executeUpdate();
}

public void deleteUser(User user) {
    Query query = em.createQuery("delete from User where username = :uname");
    query.setParameter("uname", user.getUsername());
    query.executeUpdate();
}

But when i press the edit link or the delete button, this error appears 但是当我按下编辑链接或删除按钮时,会出现此错误

    Severe:   javax.faces.el.EvaluationException: javax.persistence.TransactionRequiredException: 
Exception Description: No transaction is currently active

Would anyone tell me where is the problem. 谁能告诉我问题出在哪里。

Pleased try this: 请尝试以下操作:

em.getTransaction().begin();
   Query query = em.createQuery("update User set username = :uname where username = :uname");
    query.setParameter("uname", user.getUsername());
    query.executeUpdate();
    em.getTransaction().commit();

and let me know if this solves your problem. 让我知道这是否解决了您的问题。

You cannot explicitly call the transaction in this context. 您不能在这种情况下显式调用事务。 The commit is managed by the server automatically. 提交由服务器自动管理。

You can simply use: 您可以简单地使用:

user.setName("NEW USER NAME"); 
modifyUser(user); 

public void modifyUser(User user) {
     em.merge(user)}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 不活跃的transaciotn:javax.persistence.TransactionRequiredException:执行更新/删除查询 - Not active transaciotn: javax.persistence.TransactionRequiredException: Executing an update/delete query Java Hibernate 创建本机查询 javax.persistence.TransactionRequiredException:执行更新/删除查询 - Java Hibernate Create Native Query javax.persistence.TransactionRequiredException: Executing an update/delete query 为什么我的交易不活跃? javax.persistence.TransactionRequiredException:执行更新/删除查询 - Why is my transaction not active? javax.persistence.TransactionRequiredException: Executing an update/delete query 具有两个数据源的 Spring Boot Batch 导致 javax.persistence.TransactionRequiredException:执行更新/删除查询 - Spring Boot Batch with two Datasources causes javax.persistence.TransactionRequiredException: Executing an update/delete query Spring 数据 JPA - javax.persistence.TransactionRequiredException:执行更新/删除查询 - Spring Data JPA - javax.persistence.TransactionRequiredException: Executing an update/delete query Spring 引导:javax.persistence.TransactionRequiredException:使用 @Transactional 注释时执行更新/删除查询 - Spring Boot : javax.persistence.TransactionRequiredException: Executing an update/delete query When Using @Transactional Annotation javax.persistence.TransactionRequiredException: - javax.persistence.TransactionRequiredException: javax.persistence.TransactionRequiredException错误:JPA 2 +休眠-本机查询 - javax.persistence.TransactionRequiredException Error: jpa 2 + hibernate - Native Query javax.persistence.TransactionRequiredException的可能原因 - Possible causes of javax.persistence.TransactionRequiredException 小面应用程序中的javax.persistence.TransactionRequiredException - javax.persistence.TransactionRequiredException in small facelet application
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM