Hibernate外键是主键

4
DB Table REQUEST:
{
   primary key REQUEST_ID,
   String REQUEST_DETAILS
}

DB Table INVALID_REQUEST_DETAILS{
   (foreign key, primary key) fk_req_id references REQUEST.REQUEST_ID,
   String INVALID_COMMENTS,
   String APPROVER_NAME
}

正如您所看到的,一个REQUEST对应一个INVALID_REQUEST_DETAILS。由于某些我不理解的原因,我听说Hibernate将此映射为多对一的关系。以下是我.hbm.xml文件的代码:

<hibernate-mapping>
  <class name="InvalidRequestDetails" table="INVALID_REQUEST_DETAILS">  
  <id name="id" column="fk_req_id">
    <generator class="foreign">
        <param name="property">request</param>
    </generator>
  </id>

  ... (other column mappings omitted) ...    

  <many-to-one name="request" class="Request" unique="true" not-null="true" />
 </class>
</hibernate-mapping>

请不要只简单地告诉我“阅读Hibernate文档”,除非您能提供一些解释。该文档对概念的解释非常稀少,而且我已经阅读过了。我遇到的问题是我的映射文件显然有误,因为我无法向表中插入任何记录。
问题: 1. 如何修复我的.hbm.xml文件?为什么? 2. 如果我有一个逻辑上的一对一关系,为什么需要一个many-to-one标签? many-to-one和one-to-one之间真正的区别是什么?在什么情况下使用它们?如果我的外键不是主键,会发生什么变化?
1个回答

4

不确定你从何处获取了信息,但你可以将其建模为一对一关系。这里有一个例子。

<hibernate-mapping>
  <class name="InvalidRequestDetails" table="INVALID_REQUEST_DETAILS">  
  <id name="id" column="fk_req_id">
    <generator class="foreign">
        <param name="property">request</param>
    </generator>
  </id>

  ... (other column mappings omitted) ...    

  <one-to-one name="request" class="Request" constrained="true" />
 </class>
</hibernate-mapping>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接