【问题标题】:Hibernate foreign key is primary keyHibernate外键是主键
【发布时间】:2013-03-07 00:20:27
【问题描述】:
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 对应一个 REQUEST。出于某种我不明白的原因,我听说 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>

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

问题:

  1. 如何修复我的 .hbm.xml 文件?为什么?
  2. 如果我在上面解释了逻辑上的一对一关系,为什么我需要多对一标签?多对一和一对一之间的真正区别是什么?你什么时候用哪个?如果我的外键不是主键,会有什么变化吗?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    不确定您从哪里获得信息,但您当然可以将其建模为一对一。 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>
    

    【讨论】:

      猜你喜欢
      • 2015-03-08
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多