非主键字段外键Hibernate配置

Oracle数据库表A:Orderinfo(订单表)和表B:Orderdetail(订单详细表)

 

A:Recordid 主键,自增长序列

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

B:Recordid 主键,自增长序列

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

 

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

Orderinfo.hbm.xml

  
  
  
  
  1. <property name="orderid" type="java.lang.String"> 
  2.      <column name="ORDERID" length="40" not-null="true" unique="true" /> 
  3. </property> 
  4.  
  5.  <set name="orderdetails" inverse="true"> 
  6.        <key> 
  7.            <column name="ORDERID" length="40" not-null="true" /> 
  8.        </key> 
  9.            <one-to-many class="com.domain.Orderdetail" /> 
  10. </set> 

Orderdetail.hbm.xml

 

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

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

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

 

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

所以推断是Hibernate配置有误。

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

即:

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

 

 

你可能感兴趣的:(Hibernate,hibernate配置,外键,休闲,非主键)