Hibernate 使用复合键的一对一映射
目标是关联URL 使用以下sqlHibernate 使用复合键的一对一映射,hibernate,Hibernate,目标是关联URL 使用以下sql CREATE TABLE `profiles` ( `id` serial , `url` varchar(256) , PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `linked_profiles` ( `profile` bigint unsigned references profiles(id), `linked` bigi
CREATE TABLE `profiles` (
`id` serial ,
`url` varchar(256) ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `linked_profiles` (
`profile` bigint unsigned references profiles(id),
`linked` bigint unsigned references profiles(id),
PRIMARY KEY (`profile`, `linked`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这是hibernate映射
<hibernate-mapping>
<class name="LinkedProfiles" table="linked_profiles">
<composite-id>
<key-property name="profile" column="profile" type="long" />
<key-property name="linked" column="linked" type="long" />
</composite-id>
<one-to-one name="profile" class="Profile" cascade="save-update">
</one-to-one>
<one-to-one name="linked" class="Profile" cascade="save-update">
</one-to-one>
</class>
<class name="Profile" table="profiles">
<id name="id" type="long">
<column name="id" not-null="true"/>
<generator class="identity"/>
</id>
<property name="url" type="java.lang.String">
<column name="url"/>
</property>
</class>
</hibernate-mapping>
目标:
每个唯一的url在“profiles”表中都有一个条目。“链接的_配置文件”涉及两个URL
这导致了这个例外
org.hibernate.MappingException:linkedprofile的:profile.id的断列映射
这是Hibernate中的缺陷吗?
请参见复合键意味着如果任何组件键发生更改,它将生成另一个唯一键。现在考虑这个问题:
profiles:
id |url |
----|--------|
1 |someUrl |
2 |someUrl2|
3 |someUrl3|
linked_profiles:
profile |linked |
---------|----------|
1 |3 |->still a valid composite key
1 |2 |->still a valid composite key
下面是一些hibernate允许您添加的示例。因此,one-to-one
对Hibernate没有意义,这导致异常:org.Hibernate.MappingException:breaked column mapping
。
因此,如果您将one-to-one
更改为many-to-one
,它将起作用