2013-03-07 164 views
3
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> 

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

问题:

  1. 我怎样才能解决我的.hbm.xml文件?为什么?
  2. 如上所述,如果我具有逻辑上的一对一关系,为什么需要多对一的标签?这里的多对一和一对一之间有什么区别?你什么时候用哪个?如果我的外键不是主键,会有什么改变吗?

回答

4

不确定你从哪里得到了你的信息,但是你当然可以将它建模为一对一。 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>