非主键字段外键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
Orderdetail.hbm.xml
可是当Orderinfo表中有订单Orderid="OD100"时,新增一条Orderid="OD100"的订单详细信息保存进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> |
相关文章推荐
- hibernate(jpa)中注解配置字段为主键
- Hibernate复合主键中其中有主键是引用外键情况下的配置方法
- hibernate4多字段主键配置方案
- hibernate配置文件工具类得到对应的表名、主键名、字段名和字段描述
- 【Hibernate】一对多,多对一 的组合主键,组合外键的配置文件的写法
- Hibernate复合主键作为外键在关联映射中的配置方法
- 一个表的字段不是主键可以做其他表的外键么
- 框架学习--hibernate外键映射文件配置
- hibernate 常用主键生成策略与配置
- 获取SqlServer2005表结构(字段,主键,外键,递增,描述)
- 获取SqlServer2005表结构(字段,主键,外键,递增,描述)
- hibernate配置主键生成策略,mysql uuid
- Hibernate各种主键生成策略与配置详解
- Hibernate第三篇【主配置文件、映射文件、复合主键映射】
- hibernate条件查询注入自定义Bean无需配置文件,取需要的字段
- SQL 数据库 学习 007 通过一个示例简单介绍什么是字段、属性、列、元组、记录、表、主键、外键 (上)
- Hibernate各种主键生成策略与配置详解
- Hibernate各种主键生成策略与配置详解
- hibernate 主键一对一 外键一对一
- 获取SqlServer2005表结构(字段,主键,外键,递增,描述)