读书人

一对多,安插的时候报错Could not exec

发布时间: 2011-12-02 23:47:57 作者: rapoo

一对多,插入的时候报错Could not execute JDBC batch update,请求帮忙!
<hibernate-mapping>
<class name= "org.qsm.Major " table= "major ">
<id name= "id " type= "java.lang.String ">
<column name= "id " length= "2 " />
<generator class= "assigned " />
</id>
<property name= "name " type= "java.lang.String ">
<column name= "name " length= "20 " not-null= "true " />
</property>
<property name= "shortname " type= "java.lang.String ">
<column name= "shortname " length= "10 " not-null= "true " />
</property>
<property name= "department " type= "java.lang.String ">
<column name= "department " length= "4 " not-null= "true " />
</property>
<set name= "classeses " inverse= "true ">
<key>
<column name= "majorid " length= "2 " not-null= "true " />
</key>
<one-to-many class= "org.qsm.Classes " />
</set>
</class>
</hibernate-mapping>

<hibernate-mapping>
<class name= "org.qsm.Classes " table= "classes ">
<id name= "id " type= "java.lang.Integer ">
<column name= "id " />
<generator class= "native " />
</id>
<many-to-one name= "major " class= "org.qsm.Major " fetch= "select ">


<column name= "majorid " length= "2 " not-null= "true " />
</many-to-one>
<property name= "name " type= "java.lang.String ">
<column name= "name " length= "10 " not-null= "true " />
</property>
</class>
</hibernate-mapping>

public class Major implements java.io.Serializable{
private static final long serialVersionUID=7049254736951558367L;
private String id;
private String name;
private String shortname;
private String department;
private Set classeses=new HashSet(0);
public String getId(){
return this.id;
}
public void setId(String id){
this.id=id;
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
public String getShortname(){
return this.shortname;
}
public void setShortname(String shortname){
this.shortname=shortname;
}
public String getDepartment(){
return this.department;
}
public void setDepartment(String department){
this.department=department;
}
public Set getClasseses(){
return this.classeses;
}
public void setClasseses(Set classeses){
this.classeses=classeses;
}
}

public class Classes implements java.io.Serializable{
private static final long serialVersionUID=6183334115113485272L;
private Integer id;


private Major major;
private String name;
public Integer getId(){
return this.id;
}
public void setId(Integer id){
this.id=id;
}
public Major getMajor(){
return this.major;
}
public void setMajor(Major major){
this.major=major;
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
}

//测试语句
Major m=new Major();
Classes c=new Classes();
m.setId( "10 ");
m.setName( "hhhhhh ");
m.setShortname( "dddddd ");
m.setDepartment( "00001 ");
c.setName( "计科041 ");
c.setMajor(m);
m.getClasseses().add(c);
Session session=HibernateSessionFactory.getSession();
Transaction tran=this.session.beginTransaction();
session.save(m);
tran.commit();
session.close();


数据库脚本
CREATE TABLE `classes` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(10) NOT NULL default ' ',
`majorid` varchar(2) NOT NULL default ' ',
PRIMARY KEY (`id`),
KEY `pk_majorid` (`majorid`),
CONSTRAINT `pk_majorid` FOREIGN KEY (`majorid`) REFERENCES `major` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

CREATE TABLE `major` (
`id` varchar(2) NOT NULL default ' ',
`name` varchar(20) NOT NULL default ' ',
`shortname` varchar(10) NOT NULL default ' ',
`department` varchar(4) NOT NULL default ' ',


PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

[解决办法]
晕 自问自答了
[解决办法]
这是你两张表之间及联保存,更新!你要的不就是这样的效果吗?
[解决办法]
你加了cascade= "save-update " 就是告诉hibernate 当你保存org.qsm.Major对象时级连保存和他关联的set中的对象

读书人网 >Java Web开发

热点推荐