简体   繁体   English

获取WARN:SQL错误:1205,SQLState:41000错误:超出锁定等待超时; 尝试重新启动事务。 使用休眠保存记录

[英]Getting WARN: SQL Error: 1205, SQLState: 41000 ERROR: Lock wait timeout exceeded; try restarting transaction. Saving a record in using hibernate

I'm new into java web application development and trying to save a record using hibernate in mySQL database but getting an error when trying to save the record. 我是java web应用程序开发的新手,并试图在mySQL数据库中使用hibernate保存记录,但在尝试保存记录时遇到错误。

POJO Class POJO班

package defaultpackage;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;


public class Sirs  implements java.io.Serializable {


 private int sirsid;
 private String sirsDescription;
 private String submitter;

public Sirs() {
}


public Sirs(int sirsid) {
    this.sirsid = sirsid;
}
public Sirs(int sirsid, String sirsDescription, String submitter) {
   this.sirsid = sirsid;
   this.sirsDescription = sirsDescription;
   this.submitter = submitter;
}
@GeneratedValue(strategy=GenerationType.TABLE)
public int getSirsid() {
    return this.sirsid;
}

public void setSirsid(int sirsid) {
    this.sirsid = sirsid;
}
public String getSirsDescription() {
    return this.sirsDescription;
}

public void setSirsDescription(String sirsDescription) {
    this.sirsDescription = sirsDescription;
}
public String getSubmitter() {
    return this.submitter;
}

public void setSubmitter(String submitter) {
    this.submitter = submitter;
}
}

sirs.hbm.xml file sirs.hbm.xml文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 12 Dec, 2014 1:32:06 PM by Hibernate Tools 4.3.1 -->
<hibernate-mapping>
<class name="defaultpackage.Sirs" table="sirs" catalog="sirsdb" optimistic-lock="version">
    <id name="sirsid" type="int">
        <column name="SIRSID" />
        <generator class="assigned" />
    </id>
    <property name="sirsDescription" type="string">
        <column name="`SIRS Description`" length="45" />
    </property>
    <property name="submitter" type="string">
        <column name="Submitter" length="45" />
    </property>
</class>
</hibernate-mapping>

Hibernate.cfg.xml 的hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">       
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sirsdb?
zeroDateTimeBehavior=convertToNull</property>             
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="show_sql">true</property>
  <property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="defaultpackage/Sirs.hbm.xml"/>
</session-factory>
</hibernate-configuration>

addsirs.jsp code addsirs.jsp代码

<%@page import="defaultpackage.Sirs"%>
<!-- A jsp to insert record through hibernate -->
<%@ page import="java.util.*,org.hibernate.*,org.hibernate.cfg.*,
org.hibernate.boot.registry.StandardServiceRegistryBuilder,
org.hibernate.service.ServiceRegistry, org.hibernate.SessionFactory" %>
<%!
int sirsid;String submitter;String sirsDescription; Session session1 = null;
%>
<body>
<%
String num1=request.getParameter("t1");
if(num1 != null)
{
out.println("<h1>Data</h1>");
sirsid=Integer.parseInt(num1);
sirsDescription=request.getParameter("t2");
submitter=request.getParameter("t3");
try
{
Configuration conf = new Configuration().configure("hibernate.cfg.xml");

ServiceRegistry sr = new
StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();

SessionFactory sf = conf.buildSessionFactory(sr);

Session session1 = sf.openSession();
Sirs e=new Sirs(sirsid,sirsDescription,submitter);
Transaction transaction = session1.beginTransaction();
session1.save(e);
//session1.flush();
transaction.commit();
session1.close();
out.println("<h1>Data Inserted Successfully</h1>");
}
catch(Exception e)
{
System.out.println("e="+e.getMessage());
}
}
%>

<form>
<table width="352" border="1">
<tr>
  <th>SIRS ID</th>
  <td><input name="t1" type="text"></td>
</tr>
<tr>
  <th> Description </th>
  <td><input name="t2" type="text"></td>
</tr>
<tr>
  <th> Submitter </th>
  <td><input name="t3" type="text"></td>
</tr>
<tr>
  <th colspan="2"><input type="submit"value="Submit" >
  </th>
</tr>
</table>
</form>
</body>
</html>

web.xml file web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-   
app_3_1.xsd">
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
    <welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>
</web-app>

Glassfish server window Glassfish服务器窗口

Info:   Hibernate: insert into sirsdb.sirs (`SIRS Description`, Submitter, SIRSID) values (?, ?,      
?)
WARN:   SQL Error: 1205, SQLState: 41000
ERROR:   Lock wait timeout exceeded; try restarting transaction
Info:   HHH000010: On release of batch it still contained JDBC statements
Info:   e=could not execute statement

Please help!! 请帮忙!!

  1. Can you check that you don't have a previous instance of your app still running, or a database browsing tool opened and in the middle of a transaction? 您是否可以检查您的应用程序的先前实例是否仍在运行,或者是否在交易过程中打开了数据库浏览工具? Open a terminal to browse & work on the same table could be the root cause . 打开终端浏览和处理同一个表可能是根本原因 You can also execute show full processlist on the mysql command line. 您还可以在mysql命令行上执行show full processlist These will normally show you the full sql for the query that is locking. 这些通常会显示锁定查询的完整sql。

  2. If this doesn't help, verify that the mysql services were restarted after updating the timeout. 如果这没有帮助,请在更新超时后验证是否已重新启动mysql服务。

  3. Use hibernate connection pool with max pool size as 10. Here is an example on how to do it. 使用最大池大小为10的休眠连接池。以下是如何执行此操作的示例

暂无
暂无

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

相关问题 MySQL错误:超过了锁定等待超时; 尝试重新启动事务查询 - MySQL Error: Lock wait timeout exceeded; try restarting transaction Query 超过锁定等待超时; 尝试使用JDBC重新启动事务 - Lock wait timeout exceeded; try restarting transaction using JDBC 超过了锁定等待超时; 尝试在spring_Hibernate_Mysql中重新启动事务 - Lock wait timeout exceeded; try restarting transaction in spring_Hibernate_Mysql 超过了锁定等待超时; 尝试使用spring和Mysql重新启动事务Java - Lock wait timeout exceeded; try restarting transaction Java with spring and Mysql 由于“超过了锁定等待超时,导致事务失败; 尝试重新开始交易” - Transactions fails due to “Lock wait timeout exceeded; try restarting transaction” java.sql.SQLException:超出了锁定等待超时; 尝试重新启动事务异常在MYSQL中发生 - java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction exception occur in MYSQL 如何修复 Mysql 表之前工作时的“超出锁定等待超时;尝试重新启动事务”? - How to fix "Lock wait timeout exceeded; try restarting transaction" for Mysql table when it was working before? 发出java.lang.Exception:超出了锁定等待超时; 尝试重新启动事务 - Issue java.lang.Exception: Lock wait timeout exceeded; try restarting transaction MYSQL锁等待超时超过更新SQL上的错误 - MYSQL Lock wait timeout exceeded error on update sql hibernate锁定等待超时超时; - hibernate Lock wait timeout exceeded;
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM