2014-01-06 32 views
1

hibernate documentA unidirectional many-to-one association on a join table is common when the association is optional.为什么在冬眠期间单向多对一关联是可选的

请让我知道为什么它叫optional在这里?

<class name="Person"> 
    <id name="id" column="personId"> 
     <generator class="native"/> 
    </id> 
    <join table="PersonAddress" 
     optional="true"> 
     <key column="personId" unique="true"/> 
     <many-to-one name="address" 
      column="addressId" 
      not-null="true"/> 
    </join> 
</class> 
+1

解释这可能是有益的:HTTPS://forum.hibernate。 org/viewtopic.php?f = 1&t = 981119 –

回答

0

那么这也是因为你要么注释或定义已加入的实体的映射。

而且,它是可选的原因是因为所述@JoinColumn是在其上由串连名称所有者侧计算的默认列完成+ _ +主键列的名称

所以基本上,如果你没有指定带有列名的@JoinColumn注解,它会尝试加入地址 @ManyToOne端的hibernate关系中的名称+ _ + id(因为这是主键你的Person表 所以默认加入会发生在address_id上

,如果你改变你的主键

是PERSONID,然后加入将是对address_personId

希望我能够正确

+0

感谢您的回应。我对所给出的解释并不清楚。在我的例子中,加入方的实体是Perosn,这是正确的吗?我不清楚如何使用'JoinColumn'注解,我将文档引用到http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch08.html#assoc-unidirectional -join-m21,但在这里没有提到这个注释。最后为什么这个关联被称为可选的? – Chaitanya

+0

是的,Person实体有一个地址外键,因此它是加入的一方。基本上,一个JoinColumn注解或一个XML配置最终会做同样的事情。注释只是另一种方法来代替xml定义。当指定JoinColumn时,您会提到连接条件,该连接条件通过此“如此”列来连接。为什么它是可选的是因为如果你没有指定hibernate基于JPA批注(ManyToOne)知道如何加入表的连接列。这是我以前的规定。 – Hrishikesh

+0

这也是一个很好的链接来阅读更多http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/ – Hrishikesh