您的位置:首页 > 其它

非主键字段外键Hibernate配置

2011-11-24 11:51 330 查看
Oracle数据库表A:Orderinfo(订单表)和表B:Orderdetail(订单详细表)

A:Recordid 主键,自增长序列

Orderid 非主键,唯一约束(非主键字段做外键父项必须有唯一约束)

B:Recordid 主键,自增长序列

Orderid 非主键,外键A表中的Orderid字段

Hibernate原来Orderid字段的配置如下:

Orderinfo.hbm.xml

<property name="orderid" type="java.lang.String">
<column name="ORDERID" length="40" not-null="true" unique="true" />
</property>

<set name="orderdetails" inverse="true">
<key>
<column name="ORDERID" length="40" not-null="true" />
</key>
<one-to-many class="com.domain.Orderdetail" />
</set>

Orderdetail.hbm.xml

<many-to-one name="orderinfo" class="com.domain.Orderinfo" fetch="select">
<column name="ORDERID" length="40" not-null="true" />
</many-to-one>

可是当Orderinfo表中有订单Orderid="OD100"时,新增一条Orderid="OD100"的订单详细信息保存进Orderdetail时报错,

ORA-02291: 违反完整约束条件 (*) - 未找到父项关键字

但直接写SQL语句是可以保存成功的。

所以推断是Hibernate配置有误。

搜索很久,没找到类似的两个非主键字段外键Hibernate配置。经同事帮忙,最后修改Orderdetail.hbm.xml文件,取消多对一的约束,就好了。

即:

<property name="orderid" type="java.lang.String">
<column name="ORDERID" length="40" not-null="true"  />
</property>


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息