我有两个表,一个user,一个是shop,shop里面有一个user_id作为外键引用user的主键id,并且在数据表里设置了user_id是unique的,一对一关系直接用hibernate生成的 代码如下:<one-to-one name="shop" class="dao.pojo.Shop" cascade="all" outer-join="true" constrained="true" >
</one-to-one>以上是user的配置,以下的是shop的: <one-to-one name="user" class="dao.pojo.User" ></one-to-one>保存的时候的代码:
Shop shop = new Shop( name, type, address, phone, bizHour, bizNum,
bizImg, hygieneNum, hyginenImg);
shop.setUser(user);
shopDao.save(shop);
DAO是hibernate直接生成的,没有改过,在页面调用的时候报错:
Field 'user_id' doesn't have a default value
一对一关系映射后,在shop实体里面没有user_id,只有user,在user实体里有shop。

解决方案 »

  1.   

    你只在shop里面有user的引用 在user中没有shop的引用 应该的一对一单向映射吧,那么在user.hbm.xml中不应该有<one-to-one>的标签吧
      

  2.   

    我是双向一对一的 user里有shop的实体 shop里也有user的实体
      

  3.   

    shop表里面有一个user_id 说明你是外键关联 一对一外键关联需要从多对一关联中进行演变。
    给你一个实例
    示例:
    实体类
       public class Person {
    private int id;
    private String name;
    private IdCard idCard;
    }
       public class IdCard {
    private int id;
    private String cardNo;
    }

    Person映射文件
    <class name="Person" table="t_person">
    <id name="id" length="32">
    <generator class="native"></generator>
    </id>
    <property name="name" not-null="true" length="20"/>
    <many-to-one name="idCard" unique="true" />
    </class>
    IdCard映射文件
    <class name="IdCard" table="t_idcard">
    <id name="id" column="id" length="32">
    <generator class="native"/>
    </id>
    <property name="cardNo" not-null="true" length="20"/>
    </class>