插入成功了,但还是报错!用hibernate插入数据

zh943366739 2011-10-31 12:28:55
用hibernate插入数据,明明插入成功了,但还是报错!!为啥啊???
package hibernates;

import org.hibernate.Session;

public class UserDao {
Session session=null;
public String saveMovie(Movie movie){
try{
session=CreateSession.getSession();
session.beginTransaction();
session.save(movie);
session.beginTransaction().commit();
return "true";
}catch(Exception e){
session.getTransaction().rollback();
return "false"+e.getLocalizedMessage();
}finally{
CreateSession.closeSession();
}
}
}

我试了下,是session.beginTransaction().commit();这句话报出的错!
错误:Could not execute JDBC batch update

但是明明成功插入数据了啊!!求解求解……高手给个解!!


下面是movie表的配置文件Movie.hbm.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="hibernates.Movie" table="movie" catalog="myweb">
<id name="id" type="java.lang.String">
<column name="id" length="45" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="45" />
</property>
</class>
</hibernate-mapping>


这个是hibernate配置文件:
<?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="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://localhost:3306/myweb</property>
<property name="connection.username">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.password"></property>
<property name="hbm2ddl.auto">true</property>

<mapping resource="hibernates/Movie.hbm.xml" />

</session-factory>

</hibernate-configuration>
...全文
108 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhmy 2011-10-31
  • 打赏
  • 举报
回复
把你Movie.hbm.xml文件中的catalog="myweb"这个配置属性删掉看下,可能是这个属性导致的
zh943366739 2011-10-31
  • 打赏
  • 举报
回复
问题解决了!不是配置文件的问题,而是犯了一个很愚蠢的错误!重复运行save()方法了!
唉………………这么个低级的错误纠结了我两天!
多谢各位了!!
oxcow 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kouyisc 的回复:]

引用
session=CreateSession.getSession();
session.beginTransaction();
.......
session.beginTransaction().commit();


个人觉得这两句有问题,,,第一次已经session.beginTransaction();了。。第二次又是一次session.beginTransactio……
[/Quote]
+1
kouyiSC 2011-10-31
  • 打赏
  • 举报
回复
[Quote]
session=CreateSession.getSession();
session.beginTransaction();
.......
session.beginTransaction().commit();
[/Quote]

个人觉得这两句有问题,,,第一次已经session.beginTransaction();了。。第二次又是一次session.beginTransaction().commit();你第一次的sesson事务已经打开,后面再次打开然后提交。。。打开两次了。。。而在第二次打开的时候,是同一个movie对象去提交,此实体已经存在,所以hibernate认为是更新操作了。所以就报错Could not execute JDBC batch update
所以报错了吧。

这样试试可能正确。。
Transaction tx = session.beginTransaction();
session.save(movie);
tx.commit();
褚金辉 2011-10-31
  • 打赏
  • 举报
回复
id如果是主键,必须把它配置成主键
<id name="id" type="integer" column="id">
<generator class="assigned" />
</id>
romanitc 2011-10-31
  • 打赏
  • 举报
回复
为什么不交给spring管理呢?
  • 打赏
  • 举报
回复
Transaction tx = session.beginTransaction();
session.save(movie);
tx.commit();

试试看。。
xiezto20 2011-10-31
  • 打赏
  • 举报
回复
对的,这个myweb应该是你的库名吧,catalog="myweb" 这个不要,

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧