初学ssh,用这个来做毕设,测试时遇到这么个问题,第一个学生能顺利插入,第二个就抱错,以下是我写的相关程序PO:individual.java(学生)package com.gp.po;import java.util.Date;
import java.util.HashSet;
import java.util.Set;/**
* Individual generated by MyEclipse Persistence Tools
*/public class Individual implements java.io.Serializable
{
private static final long serialVersionUID = 48L;
private Integer individualId;
private String certType;
.............................//其他基本属性 private School school;//就读学校
...................//其他类属性 // Constructors /** default constructor */
public Individual()
{
}
......................//getter、setter、equals()等
}
***********************************************************
PO:School.java-----就读学校package com.gp.po;import java.util.HashSet;
import java.util.Set;/**
* School generated by MyEclipse Persistence Tools
*/public class School implements java.io.Serializable
{
private static final long serialVersionUID = 48L;
private Integer schoolId;
private String schoolName;
private String contactEmail;
..................//其他基本属性
private Set<Individual> individuals = new HashSet<Individual>();//该学校对应的学生
....................//其他类属性 // Constructors /** default constructor */
public School()
{
}
......................//getter、setter、equals()等
}
各自对应的hbm.xml配置
individual中的
<many-to-one name="school" class="com.gp.po.School"
column="school_id" lazy="false">
</many-to-one>school中的
<set name="individuals" cascade="all-delete-orphan"
inverse="true" lazy="true">
<key column="individual_id"></key>
<one-to-many class="com.gp.po.Individual" />
</set>然后下面是test.java,测试用的package com.gp.test;import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;import com.gp.po.Address;
import com.gp.po.CooperOrg;
import com.gp.po.Guarantor;
import com.gp.po.Individual;
import com.gp.po.School;
import com.gp.service.TestService;public class Test
{ /**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
ApplicationContext ctx = new FileSystemXmlApplicationContext("/WebRoot/WEB-INF/applicationContext.xml");
TestService ts = (TestService)ctx.getBean("testService"); ---TestService通过调用dao接口实现数据的持久化
School school = new School();
school.setSchoolName("朝16236");
ts.saveOrUpdate(school); ------------------存储学校
System.out.println(school.getSchoolId());
Guarantor g = new Guarantor();
g.setGuarantorName("担保123"); -------------与school类似的共同借款人
ts.saveOrUpdate(g);
CooperOrg org = new CooperOrg();
org.setCooperOrgName("测试资11一"); ----------与school类似的资助中心
ts.saveOrUpdate(org);
Individual mm = new Individual();
mm.setIndividualName("人5660");
mm.setOrg(org);
mm.setSchool(school);
mm.setGuarantor(g);
ts.saveOrUpdate(mm); ----这个顺利存入
Individual nn = new Individual();
nn.setIndividualName("人PPP");
nn.setOrg(org);
nn.setSchool(school);
nn.setGuarantor(g);
System.out.println(school.getSchoolId() + "第二");
ts.saveOrUpdate(nn); -------这里这个就存不进去了
}}(控制台信息贴在下面,长度不够)据我同事分析,是因为我po中使用了类的属性,在存储第二个individual时由于关联到与第一个相同的
School,会把这个School再存储一遍,就违反了数据库的约束。但是我看网上一对多的关系都是我这样的配置,他们也没什么问题,请大家解答下
唉,普通区没人理,已经困了好些天了,到处查资料也没找到个原因,大家帮帮忙啊
import java.util.HashSet;
import java.util.Set;/**
* Individual generated by MyEclipse Persistence Tools
*/public class Individual implements java.io.Serializable
{
private static final long serialVersionUID = 48L;
private Integer individualId;
private String certType;
.............................//其他基本属性 private School school;//就读学校
...................//其他类属性 // Constructors /** default constructor */
public Individual()
{
}
......................//getter、setter、equals()等
}
***********************************************************
PO:School.java-----就读学校package com.gp.po;import java.util.HashSet;
import java.util.Set;/**
* School generated by MyEclipse Persistence Tools
*/public class School implements java.io.Serializable
{
private static final long serialVersionUID = 48L;
private Integer schoolId;
private String schoolName;
private String contactEmail;
..................//其他基本属性
private Set<Individual> individuals = new HashSet<Individual>();//该学校对应的学生
....................//其他类属性 // Constructors /** default constructor */
public School()
{
}
......................//getter、setter、equals()等
}
各自对应的hbm.xml配置
individual中的
<many-to-one name="school" class="com.gp.po.School"
column="school_id" lazy="false">
</many-to-one>school中的
<set name="individuals" cascade="all-delete-orphan"
inverse="true" lazy="true">
<key column="individual_id"></key>
<one-to-many class="com.gp.po.Individual" />
</set>然后下面是test.java,测试用的package com.gp.test;import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;import com.gp.po.Address;
import com.gp.po.CooperOrg;
import com.gp.po.Guarantor;
import com.gp.po.Individual;
import com.gp.po.School;
import com.gp.service.TestService;public class Test
{ /**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
ApplicationContext ctx = new FileSystemXmlApplicationContext("/WebRoot/WEB-INF/applicationContext.xml");
TestService ts = (TestService)ctx.getBean("testService"); ---TestService通过调用dao接口实现数据的持久化
School school = new School();
school.setSchoolName("朝16236");
ts.saveOrUpdate(school); ------------------存储学校
System.out.println(school.getSchoolId());
Guarantor g = new Guarantor();
g.setGuarantorName("担保123"); -------------与school类似的共同借款人
ts.saveOrUpdate(g);
CooperOrg org = new CooperOrg();
org.setCooperOrgName("测试资11一"); ----------与school类似的资助中心
ts.saveOrUpdate(org);
Individual mm = new Individual();
mm.setIndividualName("人5660");
mm.setOrg(org);
mm.setSchool(school);
mm.setGuarantor(g);
ts.saveOrUpdate(mm); ----这个顺利存入
Individual nn = new Individual();
nn.setIndividualName("人PPP");
nn.setOrg(org);
nn.setSchool(school);
nn.setGuarantor(g);
System.out.println(school.getSchoolId() + "第二");
ts.saveOrUpdate(nn); -------这里这个就存不进去了
}}(控制台信息贴在下面,长度不够)据我同事分析,是因为我po中使用了类的属性,在存储第二个individual时由于关联到与第一个相同的
School,会把这个School再存储一遍,就违反了数据库的约束。但是我看网上一对多的关系都是我这样的配置,他们也没什么问题,请大家解答下
唉,普通区没人理,已经困了好些天了,到处查资料也没找到个原因,大家帮帮忙啊
解决方案 »
- 关于servletweb.xml配置时出现的问题
- LDAP 如何修改objectClass
- 求救! XTree 再Tomcat 可以,在weblogic 下为什么不行呢?
- 晕死,自己想出一个怪怪的问题。。
- 救命啊!!!写了两个sessionbean访问entitybean,一个可以跑,一个抛NullPointerException啊!~高手救命啊!!!
- 我做servlet时出现的问题(eclipse+lomboz+tomcat)
- 菜鸟求一个调用ejb的客户端的源代码
- soap.jar为什么只能放在%TOMCAT_HOME%/common/lib下面
- 在JBuilder7中如何实现定位打印?(解决即结贴!)
- 有一个字符串,如何判断它是由数字组成的?马上给分!
- 请问 JSP 做的程序为什么开始运行是正常的 运行一会就不能运行了 需要重起TOMCAT
- 请问能不能用java生成word文档里面的柱状图?
log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
log4j:WARN Please initialize the log4j system properly.
Hibernate: insert into gp__school (school_name, property, primary_category, secondary_category, pertained_province, contact_person, contact_tel, contact_mobile_phone, contact_email, address_id, acct_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1
Hibernate: insert into gp__guarantor (health_status, relation, cert_type, cert_id, guarantor_name, province, city, county, address_id, working_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into gp__cooper_org (cooper_org_name, pertained_bank, cooper_org_level, address_id) values (?, ?, ?, ?)
Hibernate: insert into gp__individual (cert_type, cert_id, individual_name, gender, birthday, graduate_school, g_postal_code, dorm_tel, pre_province, pre_city, pre_county, province, city, county, individual_status_code, pre_individual_status_code, guarantor_id, working_id, cooper_org_id, address_id, school_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: update gp__guarantor set health_status=?, relation=?, cert_type=?, cert_id=?, guarantor_name=?, province=?, city=?, county=?, address_id=?, working_id=? where guarantor_id=?
1第二
Hibernate: insert into gp__individual (cert_type, cert_id, individual_name, gender, birthday, graduate_school, g_postal_code, dorm_tel, pre_province, pre_city, pre_county, province, city, county, individual_status_code, pre_individual_status_code, guarantor_id, working_id, cooper_org_id, address_id, school_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Exception in thread "main" org.springframework.dao.DataIntegrityViolationException: Hibernate operation: could not insert: [com.gp.po.Individual]; SQL [insert into gp__individual (cert_type, cert_id, individual_name, gender, birthday, graduate_school, g_postal_code, dorm_tel, pre_province, pre_city, pre_county, province, city, county, individual_status_code, pre_individual_status_code, guarantor_id, working_id, cooper_org_id, address_id, school_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]; Cannot add or update a child row: a foreign key constraint fails (`gp/gp__individual`, CONSTRAINT `FKFD3DA2993F06036C` FOREIGN KEY (`individual_id`) REFERENCES `gp__school` (`school_id`)); nested exception is com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`gp/gp__individual`, CONSTRAINT `FKFD3DA2993F06036C` FOREIGN KEY (`individual_id`) REFERENCES `gp__school` (`school_id`))
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`gp/gp__individual`, CONSTRAINT `FKFD3DA2993F06036C` FOREIGN KEY (`individual_id`) REFERENCES `gp__school` (`school_id`))
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1169)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:693)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1404)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1318)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1303)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:101)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1759)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2178)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:34)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:240)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:160)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:95)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:96)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:468)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:463)
at org.springframework.orm.hibernate3.HibernateTemplate$18.doInHibernate(HibernateTemplate.java:693)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:690)
at com.gp.dao.IndividualDAO.saveOrUpdate(IndividualDAO.java:115)
at com.gp.service.TestService.saveOrUpdate(TestService.java:107)
at com.gp.test.Test.main(Test.java:54)