Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我单击register时,数据存储在数据库中,但它会给出;javax.persistence.TransactionRequiredException:没有正在进行的事务”;_Java_Mysql_Hibernate_Servlets - Fatal编程技术网

当我单击register时,数据存储在数据库中,但它会给出;javax.persistence.TransactionRequiredException:没有正在进行的事务”;

当我单击register时,数据存储在数据库中,但它会给出;javax.persistence.TransactionRequiredException:没有正在进行的事务”;,java,mysql,hibernate,servlets,Java,Mysql,Hibernate,Servlets,当我在服务器上运行我的应用程序时,用户注册页面打开,在输入所有详细信息并单击submit之后,我得到了这个消息 javax.persistence.TransactionRequiredException: no transaction is in progress org.hibernate.internal.SessionImpl.checkTransactionNeeded(SessionImpl.java:3467) org.hibernate.internal.Sess

当我在服务器上运行我的应用程序时,用户注册页面打开,在输入所有详细信息并单击submit之后,我得到了这个消息

javax.persistence.TransactionRequiredException: no transaction is in progress
    org.hibernate.internal.SessionImpl.checkTransactionNeeded(SessionImpl.java:3467)
    org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1427)
    org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1423)
    main.java.com.package.web.Register.doPost(Register.java:49)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
我的Register.java是

    package main.java.com.package.web;
import javax.servlet.annotation.WebServlet;
import org.hibernate.Transaction;

import org.hibernate.Session;

import main.java.com.package.entity.UsersEntity;
import main.java.com.package.util.HibernateUtil;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.Transactional;

import java.io.IOException;


@Transactional
@WebServlet("/Register")
public class Register extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        System.out.println("check1");
        String firstName = request.getParameter("firstName");
        String lastName = request.getParameter("lastName");
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        UsersEntity user = new UsersEntity();
        user.setFirstName(firstName);
        user.setLastName(lastName);
        user.setUsername(username);
        user.setPassword(password);
        Transaction tx = null;
        Session session = HibernateUtil.getSessionFactory().openSession();
        
        try{
            tx = session.beginTransaction();
            session.persist(user);
            session.flush();
            tx.commit();
//            session.getTransaction().commit();
        }catch (Exception e){
            response.getWriter().println("User could not be saved");
            response.getWriter().println(e);
            session.getTransaction().rollback();
            session.close();
            return;
        }
        session.flush();
        session.close();
        response.getWriter().print("Registered Successfully");
        response.addCookie(new Cookie("username",username));
        response.addCookie(new Cookie("password",password));
        response.sendRedirect("login");

    }
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        response.sendRedirect("register.jsp");
    }
}
我的hibernate.cfg.xml是

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory name="sessionFactory">
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost/demo</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.pool_size">1</property>
         <property name="connection.autocommit">true</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
        <mapping class="main.java.com.package.entity.UsersEntity"/>
    </session-factory>
</hibernate-configuration>

com.mysql.jdbc.Driver
密码
jdbc:mysql://localhost/demo
根
org.hibernate.dialogue.mysqldialogue
1.
真的
真的
更新

我输入的数据在mysql表中被排序,但仍然会发生此异常。任何建议都会非常有用。

为什么在
尝试后调用
会话.flush()
。。。catch
block,当事务已经结束时?@crizzis我没有在内部使用flush try。。。ctach块之前和之后,我改变了代码,我忘记删除这一行,它的工作非常感谢!为什么在
尝试后调用
会话.flush()
。。。catch
block,当事务已经结束时?@crizzis我没有在内部使用flush try。。。ctach块之前和之后,我改变了代码,我忘记删除这一行,它的工作非常感谢!