【发布时间】: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);
有人知道如何解决我的问题吗?
【问题讨论】: