在用hibernate的时候,需要一张表(business)映射另一张表(user),其中business表的定义如下:CREATE TABLE `business` (
  `bs_id` int(10) unsigned NOT NULL auto_increment,
  `bsname` varchar(150) NOT NULL,
  `comments` varchar(200) default NULL,
  `remindtype` int(11) default NULL,
  `sdate` timestamp NULL default NULL,
  `edate` timestamp NULL default NULL,
  `account_id` int(10) unsigned default NULL,
  `oper_id` int(10) unsigned default NULL,
  PRIMARY KEY  (`bs_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;但是account_id,oper_id都是对应这user表,用hibernate怎么映射它的user.hbm.xml表呢?这个account_id,oper_id怎么对应user表呢?

解决方案 »

  1.   

    1.在business实体类中定义2个user属性,
    private User account;
    private User oper;
    并加上setter和getter2.然后在映射文件里加上如下配置
    <many-to-one name="account" class="your.package.User" fetch="select">
                <column name="account_id"/>
     </many-to-one>
     <many-to-one name="oper" class="your.package.User" fetch="select">
                <column name="account_id" />
     </many-to-one>
      

  2.   

    <many-to-one name="account" class="your.package.User" fetch="select"> 
                <column name="account_id"/> 
    </many-to-one> 
    <many-to-one name="oper" class="your.package.User" fetch="select"> 
                <column name="oper_id" /> 
    </many-to-one>
      

  3.   

    用二个<many-to-one>标签可以搞定。
      

  4.   

    1、user表的主键是什么?总觉得你的表有冗余了
    2、既然account_id与oper_id都是user表的,那你直接就在business表中添加外键,外键参照了user的主键
    3、“account_id,oper_id都是对应这user表”,从你建表的SQL中看不出来了
      

  5.   

    两个外键的值可能不一样的,也就是不参照同一条user记录。