Hibernate中可选的一对一映射

hib*_*ate 17 java database hibernate one-to-one

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

用户类:

<one-to-one name="lastVisitedPage" class="LastVisitedPage" cascade="save-update">
Run Code Online (Sandbox Code Playgroud)

LastVisitedPage类:

<one-to-one name="user" class="user" constrained="true" />
Run Code Online (Sandbox Code Playgroud)

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

Pas*_*ent 14

据我所知,Hibernate不支持可选的一对之一(见HHH-2007),所以你必须使用一个假many-to-onenot-null="false"代替.

  • 在2018年仍然如此吗? (3认同)

Jus*_*yul 10

今天大部分时间都在尝试做类似的事情,最后找到了以下解决方案(只是在这种情况下这可能对其他人有用)

@OneToOne
@JoinColumn(name="ClassA_Id", referencedColumnName="ClassB_Id", nullable=true)
Run Code Online (Sandbox Code Playgroud)

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

  • 仅供参考 - 如果您使用Envers,此解决方法会出现问题(您将收到此错误:https://hibernate.onjira.com/browse/HHH-3853).Hibernate 3.6.8修复了可选的@OneToOne映射问题. (3认同)

dav*_*emm 6

我遇到了类似的问题,但是使用了注释。Google将我带到这里,因此,如果其他人也遇到同样的情况,那么这对我有用:

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

如果使用批注,则可以使用@NotFound(action = NotFoundAction.IGNORE)批注,以免出现异常。只要确保您的代码检查空值,因为它现在可能不存在;-)


小智 6

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