谢谢您的回复!数据库建表没问题!id是tb_item的主键,orderid是外键。 问题是如果tb_item一开始空的时候,我是可以写入多个item的,当然,它们的orderid都是一样的,所以困惑了。而且插入一个的话,tb_item的id也是增长的。MyEclipse中的提示是: Caused by: java.sql.BatchUpdateException: Duplicate entry '3' for key 1 at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:648) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195) ... 36 more 请指点!
而是你把item的orderid当作tb_item的id了。我觉得这样是合理的解释。因为你插入的是一个order对象以及它的item集合,
那么这些item有相同的orderid ,也就是那个外键,也就是这个order对象的id.
你看到的是这些orderid当然是一样的,重复的,而不是自增长的了。或许你建数据表的时候就没正确,请照这个思路检查。
问题是如果tb_item一开始空的时候,我是可以写入多个item的,当然,它们的orderid都是一样的,所以困惑了。而且插入一个的话,tb_item的id也是增长的。MyEclipse中的提示是:
Caused by: java.sql.BatchUpdateException: Duplicate entry '3' for key 1
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:648)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
... 36 more
请指点!
<!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="cn.nuaa.vo.Event" table="event" catalog="test" lazy="false">
<id name="id" type="java.lang.Integer" >
<column name="id" />
<generator class="native" />
</id>
<property name="topic" type="java.lang.String">
<column name="topic" length="20" />
</property>
<set name="speakers" inverse="false" cascade="save-update" lazy="false" outer-join="true" >
<key>
<column name="event_id" not-null="true" />
</key>
<one-to-many class="cn.nuaa.vo.Speaker" />
</set>
</class>
</hibernate-mapping><?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="cn.nuaa.vo.Speaker" table="speaker" catalog="test">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<many-to-one name="event" class="cn.nuaa.vo.Event" fetch="select" cascade="save-update" outer-join="true"
>
<column name="event_id" not-null="true" />
</many-to-one>
<property name="name" type="java.lang.String">
<column name="name" length="20" />
</property>
</class>
</hibernate-mapping>
package cn.nuaa.service;import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;import hbm.HibernateSessionFactory;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Expression;import cn.nuaa.dao.TestDAO;
import cn.nuaa.vo.Event;
import cn.nuaa.vo.Speaker;/**
* @author Administrator
*
*/
public class TestService
{ public static void main(String[] args) throws UnsupportedEncodingException
{ Event e = new Event();
Speaker s1 = new Speaker() ;
Speaker s2 = new Speaker() ;
s1.setName("111") ;
s2.setName("222") ;
s1.setEvent(e) ;
s2.setEvent(e) ;
e.setTopic("java") ;
e.getSpeakers().add(s1) ;
e.getSpeakers().add(s2) ; Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
session.save(e) ; //这样相应的speakers会被保存,id是连续增长的2个
tx.commit();
session.close(); }}
<generator class="native"/ >
</id >
改成
<id name="orderID" >
<column name="orderid"/>
<generator class="native"/ >
</id >