18

如何在休眠 hbm 文件中创建可选的一对一映射?例如,假设我有一个 User 和一个 last_visited_pa​​ge 表。用户可能有也可能没有 last_visited 页面。这是我当前在 hbm 文件中的一对一映射:

用户等级:

<one-to-one name="lastVisitedPage" class="LastVisitedPage" cascade="save-update">

LastVisitedPage 类:

<one-to-one name="user" class="user" constrained="true" />

上面的示例不允许创建没有上次访问页面的用户。新创建的用户尚未访问任何页面。如何更改 hbm 映射以使 userPrefs 映射可选?

4

5 回答 5

16

据我所知,Hibernate 不支持可选的一对一(请参阅HHH-2007),因此您必须使用假many-to-one的 withnot-null="false"来代替。

于 2010-05-06T21:30:59.243 回答
13

今天花了大部分时间尝试做类似的事情,终于找到了以下解决方案(以防万一这可能对其他人有用)

@OneToOne
@JoinColumn(name="ClassA_Id", referencedColumnName="ClassB_Id", nullable=true)

希望这可能有助于节省一些时间

于 2011-09-12T01:26:39.230 回答
7

我遇到了类似的问题,但使用了注释。谷歌把我带到了这里,所以如果其他人发现自己处于同样的境地,这对我有用:

http://opensource.atlassian.com/projects/hibernate/browse/ANN-725

如果您使用注释,则可以使用 @NotFound(action=NotFoundAction.IGNORE) 注释,这样您就不会遇到异常。只需确保您的代码检查空值,因为它现在可能不存在;-)

于 2010-12-22T16:45:15.290 回答
6

有同样的问题,@OneToOne(optional = true)在 User 类(hibernate 5.2.17.Final)上解决

于 2018-05-10T13:42:58.543 回答
0

如果一个用户最多有一个 last_visited 页面,那么有两种情况:

(a) 某些给定用户没有 last_visited 页面,在这种情况下,last_visited_pa​​ge 表中不会有该用户的任何元组,(b) 某些给定用户只有一个 last_visited 页面,在这种情况下,将只有一个元组用于last_visited_pa​​ge 表中的此用户。

这应该清楚地表明 userid 是您上次访问的页表中的候选键。

这应该清楚地表明您应该向 DBMS 声明该密钥。

于 2010-05-07T00:12:43.503 回答