gpt4 book ai didi

hibernate - 使用复合键进行一对一映射

转载 作者:行者123 更新时间:2023-12-02 02:46:52 26 4
gpt4 key购买 nike

目标是关联 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` 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 在“配置文件”表中都会有一个条目。 “linked_profiles”关联两个 url。

这会导致此异常。

org.hibernate.MappingException:损坏的列映射:LinkedProfiles的profile.id

这是 Hibernate 的缺陷吗?请参阅https://hibernate.atlassian.net/browse/HHH-1771

最佳答案

复合键意味着如果任何组件键发生更改,它将生成另一个唯一键。现在考虑一下:

 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 允许您添加的一些示例。因此,一对一对 Hibernate 来说没有意义,这会导致异常:org.hibernate.MappingException:损坏的列映射。因此,如果您将一对一更改为多对一,它将起作用。

关于hibernate - 使用复合键进行一对一映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19908509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com