我有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)大家说说看什么问题,回答正确立即给分

解决方案 »

  1.   

    你将外健关联id试试.`id` int(11) NOT NULL auto_increment, 
      

  2.   

    外键必须是主键吧
    另外养成过程用transaction包起来的好习惯~~
      

  3.   

    报错时LZ有没有察看l_account 表中有没新增进去数据?
      

  4.   

    l_account表的数据进去了,就是l_member没进去,我想让l_account作为主表,专门放用户名和密码的
      

  5.   

    首先,一对多的多方存放的应该是“一”方的主键,而你存的是userid,这里就有错误了,你数据库的驻外间关系定义的应该就有问题其次,一对多的保存,通常是先存主表,再存子表!
      

  6.   

    我是想吧l_account做主表的...做单点登录,认证用
      

  7.   

    不管你想什么,首先要满足hibernate的or映射的要求呀,呵呵
      

  8.   

    hehe ,方便留下个msn或者qq吗