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
}

因此,如您所见,对一个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>

除非您也提供一些解释,否则请不要让我“阅读休眠文档”,它包含对概念的非常稀疏的解释,并且我已经阅读过。我遇到的问题是我的映射文件显然是错误的,因为我无法在表中插入任何记录。

问题:
  • 如何修复.hbm.xml文件?为什么?
  • 如果如上所述,我在逻辑上是一对一的关系,为什么我需要多对一的标签?这里多对一和一对一的真正区别是什么?您什么时候使用哪个?如果我的外键也不是主键,会有什么变化吗?
  • 最佳答案

    不确定从何处获取信息,但是可以肯定地将其建模为一对一。 Here's一个例子。

    <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>
    

    07-24 14:39