在hibernate中使用insertable和updateable作为false进行多对一映射

时间:2014-08-11 11:48:04

标签: java hibernate

根据Hibernate documentation,在下面的示例中:

<class name="Customer">
   <composite-id name="id" class="CustomerId">
      <key-property name="firstName" column="userfirstname_fk"/>
      <key-property name="lastName" column="userfirstname_fk"/>
      <key-property name="customerNumber"/>
   </composite-id>

   <property name="preferredCustomer"/>

   <many-to-one name="user">
      <column name="userfirstname_fk" updatable="false" insertable="false"/>
      <column name="userlastname_fk" updatable="false" insertable="false"/>
   </many-to-one>
</class>

<class name="User">
   <composite-id name="id" class="UserId">
      <key-property name="firstName"/>
      <key-property name="lastName"/>
   </composite-id>

   <property name="age"/>
</class>
  

请注意上一个示例中的一些内容:

     

属性(和列)的顺序很重要。关联实体与关联实体的主键之间必须相同

     

多对一使用与主键相同的列,因此必须标记为只读(可插入且可更新为false)。

     

与@MapsId不同,关联实体的id值未透明复制,请检查外部id生成器以获取更多信息。

我是Hibernate的新手,因此很难理解这些。

  • 为什么属性的顺序很重要?哪个被称为关联,哪个被关联在第一个语句中?

  • 为什么需要将列设置为false才能插入和更新?

  • 什么是透明复制? @MapId如何在这里发挥作用?

有人可以帮我澄清这些。

0 个答案:

没有答案