[英]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!! 请帮忙!!
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。
If this doesn't help, verify that the mysql services were restarted after updating the timeout. 如果这没有帮助,请在更新超时后验证是否已重新启动mysql服务。
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.