Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate中可选的一对一映射_Java_Database_Hibernate_One To One - Fatal编程技术网

Java Hibernate中可选的一对一映射

Java Hibernate中可选的一对一映射,java,database,hibernate,one-to-one,Java,Database,Hibernate,One To One,如何在hibernate hbm文件中创建可选的一对一映射?例如,假设我有一个用户和一个最近访问的页面表。用户可能有也可能没有最后访问的页面。以下是我当前在hbm文件中的一对一映射: 用户类别: <one-to-one name="lastVisitedPage" class="LastVisitedPage" cascade="save-update"> LastVisitedPage类: <one-to-one name="user" class="user" con

如何在hibernate hbm文件中创建可选的一对一映射?例如,假设我有一个用户和一个最近访问的页面表。用户可能有也可能没有最后访问的页面。以下是我当前在hbm文件中的一对一映射:

用户类别:

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

LastVisitedPage类:

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


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

据我所知,Hibernate不支持可选的一对一(请参阅),因此您必须使用带有
not null=“false”
的假
多对一

如果用户最多有一个最后访问的页面,则有两种情况:

(a) 某些给定用户没有上次访问的页面,在这种情况下,上次访问的页面表中不会有此用户的任何元组, (b) 某些给定用户恰好有一个上次访问的页面,在这种情况下,在上次访问的页面表中该用户正好有一个元组

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


很明显,您应该声明DBMS的密钥。

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


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

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


希望这可以帮助节省一些时间

有同样的问题,通过用户类(hibernate 5.2.17.Final)上的
@OneToOne(optional=true)
解决。

仅供参考-如果您使用Envers,此解决方法会有问题(您将得到此错误:)。Hibernate 3.6.8通过可选的@OneTONE映射解决了这个问题。2018年这仍然是真的吗?JPA 2.1似乎支持可选的OneTONE,请参阅,或者
@OneToOne
@JoinColumn(name="ClassA_Id", referencedColumnName="ClassB_Id", nullable=true)