我有2个表
-- ----------------------------
-- Table structure for l_account
-- ----------------------------
CREATE TABLE `l_account` (
`id` int(11) NOT NULL auto_increment,
`userid` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`usertype` char(1) NOT NULL,
`email` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `l_userid` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Table structure for l_member
-- ----------------------------
CREATE TABLE `l_member` (
`id` int(11) NOT NULL auto_increment,
`userid` varchar(255) NOT NULL,
`nickname` varchar(255) default NULL,
`name` varchar(255) default NULL,
`sex` char(255) default NULL,
`role` varchar(255) default NULL,
`phone` varchar(255) default NULL,
`mobile` varchar(255) default NULL,
`identification` varchar(255) default NULL,
`profile` varchar(255) default NULL,
`mem_favorite` varchar(255) default NULL,
`mem_picPath` varchar(255) default NULL,
`mem_memo` varchar(255) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `userid` (`userid`),
CONSTRAINT `userid` FOREIGN KEY (`userid`) REFERENCES `l_account` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;他们通过userid进行了外键关联,我再根据myeclipse生成关系
<?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.com.zhouphratry.core.webapp.model.LAccount" table="l_account" catalog="letou">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity"></generator>
</id>
<property name="userid" type="java.lang.String">
<column name="userid" not-null="true" unique="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" not-null="true" />
</property>
<property name="usertype" type="java.lang.String">
<column name="usertype" length="1" not-null="true" />
</property>
<property name="email" type="java.lang.String">
<column name="email" not-null="true" />
</property>
<set name="LMembers" inverse="true" cascade="all" >
<key>
<column name="userid" not-null="true" unique="true" />
</key>
<one-to-many class="cn.com.zhouphratry.core.webapp.model.LMember" />
</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.com.zhouphratry.core.webapp.model.LMember" table="l_member" catalog="letou">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity"></generator>
</id>
<many-to-one name="LAccount" class="cn.com.zhouphratry.core.webapp.model.LAccount" fetch="select" cascade="all">
<column name="userid" not-null="true" unique="true" />
</many-to-one>
<property name="nickname" type="java.lang.String">
<column name="nickname" />
</property>
<property name="name" type="java.lang.String">
<column name="name" />
</property>
<property name="sex" type="java.lang.String">
<column name="sex" />
</property>
<property name="role" type="java.lang.String">
<column name="role" />
</property>
<property name="phone" type="java.lang.String">
<column name="phone" />
</property>
<property name="mobile" type="java.lang.String">
<column name="mobile" />
</property>
<property name="identification" type="java.lang.String">
<column name="identification" />
</property>
<property name="profile" type="java.lang.String">
<column name="profile" />
</property>
<property name="memFavorite" type="java.lang.String">
<column name="mem_favorite" />
</property>
<property name="memPicPath" type="java.lang.String">
<column name="mem_picPath" />
</property>
<property name="memMemo" type="java.lang.String">
<column name="mem_memo" />
</property>
</class>
</hibernate-mapping>
------------------------------------------------------------
然后代码里面进行插入
public String execute() throws Exception {
if(logger.isInfoEnabled())
logger.info("载入执行注册页面...");
System.out.println(this.getLmember().getLAccount().getUserid());
System.out.println(this.getLmember().getNickname());
LAccount LAccount=new LAccount();
LAccount.setUserid("test");
LAccount.setEmail("test");
LAccount.setPassword("passs");
LAccount.setUsertype("1");
this.getLmember().setLAccount(LAccount);
registerService.save(this.getLmember());
return Constants.SUCCESS;
}
结果就说外键约束报错,搞不明白,
sdfsd
sdf
Hibernate: insert into letou.l_account (userid, password, usertype, email) values (?, ?, ?, ?)
Hibernate: insert into letou.l_member (userid, nickname, name, sex, role, phone, mobile, identification, profile, mem_favorite, mem_picPath, mem_memo) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[framework] 2008-10-13 08:59:25,812 - org.hibernate.util.JDBCExceptionReporter -332094 [http-8080-2] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1452, SQLState: 23000
[framework] 2008-10-13 08:59:25,812 - org.hibernate.util.JDBCExceptionReporter -332094 [http-8080-2] ERROR org.hibernate.util.JDBCExceptionReporter - Cannot add or update a child row: a foreign key constraint fails (`letou/l_member`, CONSTRAINT `userid` FOREIGN KEY (`userid`) REFERENCES `l_account` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE)
2008-10-13 8:59:25 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`letou/l_member`, CONSTRAINT `userid` FOREIGN KEY (`userid`) REFERENCES `l_account` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)大家说说看什么问题,回答正确立即给分
-- ----------------------------
-- Table structure for l_account
-- ----------------------------
CREATE TABLE `l_account` (
`id` int(11) NOT NULL auto_increment,
`userid` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`usertype` char(1) NOT NULL,
`email` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `l_userid` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Table structure for l_member
-- ----------------------------
CREATE TABLE `l_member` (
`id` int(11) NOT NULL auto_increment,
`userid` varchar(255) NOT NULL,
`nickname` varchar(255) default NULL,
`name` varchar(255) default NULL,
`sex` char(255) default NULL,
`role` varchar(255) default NULL,
`phone` varchar(255) default NULL,
`mobile` varchar(255) default NULL,
`identification` varchar(255) default NULL,
`profile` varchar(255) default NULL,
`mem_favorite` varchar(255) default NULL,
`mem_picPath` varchar(255) default NULL,
`mem_memo` varchar(255) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `userid` (`userid`),
CONSTRAINT `userid` FOREIGN KEY (`userid`) REFERENCES `l_account` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;他们通过userid进行了外键关联,我再根据myeclipse生成关系
<?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.com.zhouphratry.core.webapp.model.LAccount" table="l_account" catalog="letou">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity"></generator>
</id>
<property name="userid" type="java.lang.String">
<column name="userid" not-null="true" unique="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" not-null="true" />
</property>
<property name="usertype" type="java.lang.String">
<column name="usertype" length="1" not-null="true" />
</property>
<property name="email" type="java.lang.String">
<column name="email" not-null="true" />
</property>
<set name="LMembers" inverse="true" cascade="all" >
<key>
<column name="userid" not-null="true" unique="true" />
</key>
<one-to-many class="cn.com.zhouphratry.core.webapp.model.LMember" />
</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.com.zhouphratry.core.webapp.model.LMember" table="l_member" catalog="letou">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity"></generator>
</id>
<many-to-one name="LAccount" class="cn.com.zhouphratry.core.webapp.model.LAccount" fetch="select" cascade="all">
<column name="userid" not-null="true" unique="true" />
</many-to-one>
<property name="nickname" type="java.lang.String">
<column name="nickname" />
</property>
<property name="name" type="java.lang.String">
<column name="name" />
</property>
<property name="sex" type="java.lang.String">
<column name="sex" />
</property>
<property name="role" type="java.lang.String">
<column name="role" />
</property>
<property name="phone" type="java.lang.String">
<column name="phone" />
</property>
<property name="mobile" type="java.lang.String">
<column name="mobile" />
</property>
<property name="identification" type="java.lang.String">
<column name="identification" />
</property>
<property name="profile" type="java.lang.String">
<column name="profile" />
</property>
<property name="memFavorite" type="java.lang.String">
<column name="mem_favorite" />
</property>
<property name="memPicPath" type="java.lang.String">
<column name="mem_picPath" />
</property>
<property name="memMemo" type="java.lang.String">
<column name="mem_memo" />
</property>
</class>
</hibernate-mapping>
------------------------------------------------------------
然后代码里面进行插入
public String execute() throws Exception {
if(logger.isInfoEnabled())
logger.info("载入执行注册页面...");
System.out.println(this.getLmember().getLAccount().getUserid());
System.out.println(this.getLmember().getNickname());
LAccount LAccount=new LAccount();
LAccount.setUserid("test");
LAccount.setEmail("test");
LAccount.setPassword("passs");
LAccount.setUsertype("1");
this.getLmember().setLAccount(LAccount);
registerService.save(this.getLmember());
return Constants.SUCCESS;
}
结果就说外键约束报错,搞不明白,
sdfsd
sdf
Hibernate: insert into letou.l_account (userid, password, usertype, email) values (?, ?, ?, ?)
Hibernate: insert into letou.l_member (userid, nickname, name, sex, role, phone, mobile, identification, profile, mem_favorite, mem_picPath, mem_memo) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[framework] 2008-10-13 08:59:25,812 - org.hibernate.util.JDBCExceptionReporter -332094 [http-8080-2] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1452, SQLState: 23000
[framework] 2008-10-13 08:59:25,812 - org.hibernate.util.JDBCExceptionReporter -332094 [http-8080-2] ERROR org.hibernate.util.JDBCExceptionReporter - Cannot add or update a child row: a foreign key constraint fails (`letou/l_member`, CONSTRAINT `userid` FOREIGN KEY (`userid`) REFERENCES `l_account` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE)
2008-10-13 8:59:25 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`letou/l_member`, CONSTRAINT `userid` FOREIGN KEY (`userid`) REFERENCES `l_account` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)大家说说看什么问题,回答正确立即给分
另外养成过程用transaction包起来的好习惯~~