【问题标题】:Hibernate One-to-One unidirectional on foreign key外键上的休眠一对一单向
【发布时间】:2014-08-21 06:04:50
【问题描述】:

我有 2 张桌子:

   CREATE TABLE product(
  `id` INT NOT NULL AUTO_INCREMENT,
  // SOME OTHER DATA
  PRIMARY KEY (`id`));


 CREATE TABLE announce (
  `id` INT NOT NULL AUTO_INCREMENT,
  `productId` INT NOT NULL,
  // SOME OTHER DATA
  PRIMARY KEY (`id`),
  UNIQUE INDEX `productIdd_UNIQUE` (`productId` ASC),
  CONSTRAINT `FK_ANNOUNCE_PRODUCT`
    FOREIGN KEY (`productId`)
    REFERENCES `product` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE); 

我想用hibernate 4实现一对一的外键单向

这里是我的配置 hbm.xml:

<hibernate-mapping>
    <class name="mypackage.Announce" table="announce">
        <id name="id" type="int">
            <column name="id" />
            <generator class="native" />
        </id>
        <one-to-one name="product" foreign-key="productId" cascade="all-delete-orphan" lazy="false" />
      ...
    </class>
</hibernate-mapping>



<hibernate-mapping>
    <class name="mypackage.Product" table="product">
        <id name="id" type="int">
            <column name="id" />
            <generator class="native" />
        </id>
        ...
    </class>
</hibernate-mapping>

我能够获取基础数据,但是当我尝试使用现有产品创建公告时,我的代码会抛出 SQLException

22:56:17.565 调试 o.h.e.jdbc.spi.SqlExceptionHelper - 无法 执行语句 [n/a] java.sql.SQLException: Field 'productId' 没有默认值

保存生成我的外键的id,但我不明白为什么。

java 代码(我的 dao 制作基本指令,如 sessionFactory.save 等...):

Announce announce = new Announce();
...
Product product = this.productDao.getProduct(productId);
announce.setProduct(product);

this.announceDao.save(announce);

有人知道如何解决我的问题吗?

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

    您当前的配置告诉 hibernate 使用主键作为两个表之间的关联,您希望在其中使用单独的列(至少这是您 ddl 允许的)。

    xml 中的一对一映射应使用&lt;many-to-one unique="true" column=".."/&gt; 定义。这很令人困惑,我同意。

    <hibernate-mapping>
      <class name="mypackage.Announce" table="announce">
      ...
        <many-to-one name="product" columm="productId" cascade="all-delete-orphan" lazy="false" unique="true"/>
     ... 
      </class>
    </hibernate-mapping>
    

    【讨论】:

    • 您可以查看this 并提供帮助吗?这个和我的很相似。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2013-04-30
    • 2013-09-29
    相关资源
    最近更新 更多