java—当我单击register时,数据存储在数据库中,但它给出“javax.persistence.transactionrequiredexception:没有事务正在进行”

qv7cva1a  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(257)

当我在服务器上运行我的应用程序时,用户注册页打开,在输入所有详细信息并单击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>

我输入的数据在mysql表中被删除了,但是仍然发生了这个异常,任何建议都会非常有用

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题