好像没看出问题
发一个我的配置吧AuthInfo和IdentityCard一对一,AuthInfo的主键authId手动生成,IdentityCard的主键cardId根据authId获得。
AuthInfo.hbm.xml
......
<id
name="authId"
type="string"
column="AUTH_ID"
>
<generator class="assigned"/>
</id><one-to-one name="IdentityCard" class="package.IdentityCard" cascade="save-update"/>
......
IdentityCard.hbm.xml
......
<id
name="cardId"
type="string"
column="CARD_ID"
>
<generator class="foreign">
<param name="property">AuthInfo</param>
</generator>
</id><one-to-one name="AuthInfo" class="package.AuthInfo" cascade="save-update" constrained="true"/>保存代码
auth.setIdentityCard(card);
card.setAuthInfo(auth);
session.save(card);

解决方案 »

  1.   

    你的memberid没有设置生成规则,故而hibernate把它当成了用户自己赋值了。而你的代码没有给这个字段赋值,当然会报错。
    你应当根据你的数据库支持的类型,为 memberid字段设置生成规则。你可以参考hibernate的官方文档的相关说明,或者1楼老兄的例子:
    <id name= "authId " type= "string " column= "AUTH_ID"> 
        <generator   class= "assigned "/> 
    </id> 
      

  2.   

    最好把数据库表结构列出   Memberinfo的id标签能用MemberinID?
      

  3.   

    CREATE TABLE `tbl_member` (
      `MemberID` varchar(18) NOT NULL COMMENT '用户ID',
      `Username` varchar(20) default 'guest' COMMENT '用户登录名',
      `InitMark` varchar(1) default '0' COMMENT 'y:已进行了初始化;n:用户放弃高级功能;0-6:初始化进行到第几步',
      `BoundlePerson` varchar(18) default '' COMMENT '绑定个人主健康纪录ID',
      `AlonePerson` varchar(197) default '' COMMENT '本账户中个人健康纪录ID集,ID之间用,隔开',
      `CoverPerson` varchar(197) default '' COMMENT '本账户代管个人健康纪录ID集,ID之间用,隔开',
      `Password` varchar(100) default 'guest' COMMENT '用户登录密码',
      `MemberKey` varchar(32) default '' COMMENT '用户密钥',
      `Email` varchar(50) default '@com.cn' COMMENT 'Email地址',
      `ErrorLog` int(1) default '0' COMMENT '密码登陆错误0-9,超过9次自动封ID',
      `MemberType` varchar(1) default 'c' COMMENT 'c顾客/e专家/u单位/s员工',
      `MemberRole` varchar(2) default 'cs' COMMENT 'cs/ct/cf/ch/cu;em/es/ew;so/sm/sc/sh;uh/ uf/ ud/ up/ ui/ uc/',
      `Nickname` varchar(20) default '' COMMENT '昵称',
      `TitleProfix` varchar(20) default '尊敬的' COMMENT '称呼前缀(尊敬的...)',
      `TitleSuffix` varchar(20) default '先生(小姐)' COMMENT '称呼后缀(先生/小姐/太太,博士/阁下/爵士)',
      `MemberGrade` varchar(3) default '1' COMMENT '用户级别(1-100)',
      `Summary` varchar(255) default '' COMMENT '个人简介',
      `ForumName` varchar(20) default '' COMMENT '论坛昵称',
      `BlogName` varchar(20) default '' COMMENT '博客昵称',
      `Blogger` varchar(11) default '' COMMENT 'Blogger代码(由系统生成)',
      `BlogUrl` varchar(100) default 'http://' COMMENT '博客公开URL(客户自定义)',
      `ChatName` varchar(20) default '' COMMENT '聊天昵称',
      `CommName` varchar(20) default '' COMMENT '社区昵称',
      `RegTime` varchar(19) default '' COMMENT 'XXXX XX XX xx:xx:xx(注册时间)',
      `IniTime` varchar(19) default '' COMMENT 'XXXX XX XX xx:xx:xx(初始化时间)',
      `KeepOutDate` varchar(19) default '' COMMENT 'XXXX XX XX(解禁日期)',
      `KeepOutDay` int(4) default '0' COMMENT '禁闭天数',
      `Cycle` varchar(120) default '' COMMENT '加入的圈子代码',
      `Alliance` varchar(120) default '' COMMENT '加入的联盟代码',
      `LastIP` varchar(15) default '' COMMENT '最后一次登陆时的IP地址',
      `LastTime` varchar(19) default '' COMMENT 'XXXX XX XX xx:xx:xx(最后一次的登陆时间)',
      `LastActivity` varchar(19) default '' COMMENT 'XXXX XX XX xx:xx:xx(最后一次的活动时间)',
      `LastComm` varchar(19) default '' COMMENT 'XXXX XX XX xx:xx:xx(最后一次在社区交流的时间)',
      `NewPrompt` varchar(1) default 'n' COMMENT 'y/n(有/没有短信提示)',
      `Score` int(10) default '0' COMMENT '总积分',
      `Hotspot` int(10) default '0' COMMENT '热点',
      `Sinew` int(10) default '0' COMMENT '体力',
      `Wit` int(10) default '0' COMMENT '学识',
      `Rich` int(10) default '0' COMMENT '财富',
      `Goodwill` int(10) default '0' COMMENT '威望',
      `Oof` int(10) default '0' COMMENT '现金(OOF优福币)',
      `UserFaceUrl` varchar(300) default 'images/FaceImg/UserFaceUrlDefault.gif' COMMENT '用户肖像',
      `ForumFaceUrl` varchar(300) default 'images/FaceImg/ForumFaceUrlDefault.gif' COMMENT '论坛肖像',
      `BlogFaceUrl` varchar(300) default 'images/FaceImg/BlogFaceUrlDefault.gif' COMMENT '博客肖像',
      `ChatFaceUrl` varchar(300) default 'images/FaceImg/ChatFaceUrlDefault.gif' COMMENT '聊天肖像',
      `CommFaceUrl` varchar(300) default 'images/FaceImg/CommFaceUrlDefault.gif' COMMENT '社区肖像',
      `ExpertID` varchar(20) default '' COMMENT '如果是专家,记录专家ID',
      `StaffID` varchar(20) default '' COMMENT '如果是员工,记录员工ID',
      `UnitID` varchar(20) default '' COMMENT '如果是单位,记录单位ID',
      `Memo` mediumtext COMMENT '备注',
      `lastSessionId` varchar(50) default '' COMMENT 'SessionID',
      PRIMARY KEY  (`MemberID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='会员主表';
      

  4.   

    1楼和3楼的方法我都试了  还是不行  都是报必须在save之前手动赋值
      

  5.   

    id我在保存之前已经用调试和后台打印都显示出来id是有值的了  而且id是不重复的
      

  6.   

    你用的是什么数据库?举个例子,如果你的是oracle的话,那么这个menberid应该是这样配置的:        <id name="memberid" type="long" column="id">
                <generator class="native">
                    <param name="sequence">S_member</param>
                </generator>
            </id>这里假设你的sequence是 s_member这样的话,应该就没有问题了
      

  7.   

    是的啊,从表的id设置成自增就可以了啊,没必要设置成什么foreign.