根据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如何在这里发挥作用?
有人可以帮我澄清这些。