代码如下,Gender是个枚举类型:
public class Buyer implements Serializable{
/** 用户名 **/
private String username;//只允许字母/数字/下划线
/** 密码 **/
private String password;//采用MD5加密
/** 真实姓名 **/
private String realname;
/** 电子邮箱 **/
private String email;
/** 性别 **/
private Gender gender=Gender.MAN;
/** 联系信息 **/
private ContactInfo contactInfo;
/** 是否启用 **/
private Boolean visible=true;
/** 注册时间 **/
private Date regTime = new Date();
         //...
}public class ContactInfo implements Serializable{
private Integer contactid;
/** 地址 **/
private String address;
/** 邮编 **/
private String postalcode;
/** 座机 **/
private String phone;
/** 手机 **/
private String mobile;
/** 所属用户 **/
private Buyer buyer;
         //...
}
hibernate配置如下:
<hibernate-mapping>
<class name="com.liaoqian.bean.user.Buyer">
<id name="username" type="string" length="18">
<generator class="assigned"></generator>
</id> <property name="password" type="string" not-null="true" length="32"></property>
<property name="realname" type="string" length="8"></property>
<property name="email" type="string" length="50" not-null="true"></property>
<property name="gender"></property>
<property name="visible" not-null="true"></property>
<property name="regTime"></property>

<one-to-one name="contactInfo" property-ref="buyer" cascade="all"></one-to-one>
</class>
</hibernate-mapping><hibernate-mapping>
<class name="com.liaoqian.bean.user.ContactInfo">
<id name="contactid">
<generator class="native"></generator>
</id> <property name="address" type="string" length="100" not-null="true"></property>
<property name="postalcode" type="string" length="6"></property>
<property name="phone" type="string" length="20"></property>
<property name="mobile" type="string" length="11"></property>

<many-to-one name="buyer" column="buyer_id" unique="true"/>
</class>
</hibernate-mapping>单元测试方法:
@Test
public void testSave() {
Buyer buyer = new Buyer("liaoqian","123456","[email protected]");
ContactInfo contactInfo = new ContactInfo();
contactInfo.setAddress("广州");
contactInfo.setMobile("13671323507");
contactInfo.setPhone("010-64469090-9");
contactInfo.setPostalcode("100028");
buyer.setContactInfo(contactInfo);
buyer.setRealname("才");
buyerService.save(buyer);
}
保存后发现contactinfo表的buyer_id为null,没有和buyer表的username关联上, 怎么解决

解决方案 »

  1.   

    cascade="all"
    先把这个cascade这个级联属性去掉,以前碰到过,也觉得奇怪,没有找出根本的原因,这样去掉又可以关联上FORM:QQ群Java 2  Enterprise Edition(88509302)
      

  2.   

    这样的不是没有级联保存了? contactinfo都没数据
      

  3.   

    contactinfo表的buyer_id为null?你这里的buyer_id不是外键啊
      

  4.   

    感到楼主的映射没有问题。检查了一下Java代码,发现楼主只写了:buyer.setContactInfo(contactInfo);却没有写:contactInfo.setBuyer(buyer);我想这就是原因吧。
      

  5.   

    7楼说的正确, 但我怎样才可以省掉contactInfo.setBuyer(buyer); 这句
      

  6.   

    按楼主的hbm.xml那是不能省掉 setbuyer
    如果要 就可以考虑修改  hbm.xml<hibernate-mapping> 
    <class name="com.liaoqian.bean.user.Buyer"> 
    .....
    <many-to-one name="contactInfo" class="ContactInfo" unique="true" cascade="all"></many-to-one>
    </class> 
    </hibernate-mapping> <class name="com.liaoqian.bean.user.ContactInfo"> 
    ...
    <one-to-one name="buyer" class="Buyer"></one-to-one>
    </hibernate-mapping> 
      

  7.   

    你的意思是把外键配在Buyer那端,   我想问问配在哪边好? 看了几个视频都不同的,这个有讲究吗?感觉多了一句很不好
      

  8.   

    你配置文件中没有关联外键啊
    <hibernate-mapping> 
    <class name="com.liaoqian.bean.user.ContactInfo"> 
    <id name="contactid"> 
    <generator class="native"> </generator> 
    </id> 
    id应该是foriegn
      

  9.   

    这里其实有个小技巧,只要修改一下你的setContactInfo: public void setContactInfo(ContactInfo contactInfo){
    this.contactInfo = contactInfo;
    contactInfo.setBuyer(this); 
    }