hibernate 一对多插入数据失败
当我运行我的代码时.只能向主表里面插入数据.面子表是空的..这是怎么回事.请帮一下...
运行结束如:
Hibernate: insert into Customer (custName, CID) values (?, ?)
Hibernate: update Account set ACCNUMBER=?, CIDFORCUSTOMER=? where AID=?
Hibernate: update Account set ACCNUMBER=?, CIDFORCUSTOMER=? where AID=?
本应是三个插入语句 的.现在有两条更新的语句,不得解,请求帮助.....
//========================================================================
以下是代码:
Customer.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 - Hibernate Tools
-->
<hibernate-mapping default-lazy="false">
<class name="com.hibernate.Customer" table="Customer" >
<id name="custId" type="java.lang.String">
<column name="CID"/>
<generator class="assigned"/>
</id>
<property name="custName"/>
<set name="accounts" inverse="true" cascade="all" table="Account">
<key column="CIDFORCUSTOMER"/>
<one-to-many class="com.hibernate.Account"/>
</set>
</class>
</hibernate-mapping>
Account.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 - Hibernate Tools
-->
<hibernate-mapping>
<class name="com.hibernate.Account" table="Account">
<id name="aid" type="java.lang.Integer" unsaved-value="0">
<column name="AID"/>
<generator class="increment"></generator>
</id>
<property name="accNumber" type="java.lang.String">
<column name="ACCNUMBER"></column>
</property>
<many-to-one name="customer" class="com.hibernate.Customer">
<column name="CIDFORCUSTOMER"/>
</many-to-one>
</class>
</hibernate-mapping>
//===========================================
Account class 文件:
package com.hibernate;
import java.io.Serializable;
public class Account implements Serializable {
private static final long serialVersionUID =1l;
private Integer aid;
private String accNumber;
private Customer customer;
public String getAccNumber() {
return accNumber;
}
public void setAccNumber(String accNumber) {
this.accNumber = accNumber;
}
public Integer getAid() {
return aid;
}
public void setAid(Integer aid) {
this.aid = aid;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
//================================
Customer class 文件:
package com.hibernate;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Customer implements Serializable
{
private static final long serialVersionUID =1l;
private String custId;
private String custName;
private Set<Account> accounts=new HashSet<Account>();
public Customer()
{
}
public Set getAccounts() {
return accounts;
}
public void setAccounts(Set<Account> accounts) {
this.accounts = accounts;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getCustId() {
return custId;
}
public void setCustId(String custId) {
this.custId = custId;
}
}
//==================================================================
测试文件
/**
*
*/
package com.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
/**
* @author li
*
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Configuration conf=new Configuration();
conf.configure();
SessionFactory sf=conf.buildSessionFactory();
Customer cust=new Customer();
cust.setCustId("Ca05f");
cust.setCustName("liqinqin");
Session s=sf.openSession();
Transaction tx=s.beginTransaction();
Account acc=new Account();
acc.setAid(003);
acc.setAccNumber("C00100001");
acc.setCustomer(cust);
cust.getAccounts().add(acc);
Account acc1=new Account();
acc1.setAid(004);
acc1.setAccNumber("C00100001");
acc1.setCustomer(cust);
//cust.setAccounts( ());
cust.getAccounts().add(acc1);
s.save(cust);
s.flush();
tx.commit();
s.close();
sf.close();
}
}