一尘不染

Hibernate一对一或一对一映射

hibernate

我正在尝试在Hibernate中将一对一关系映射为“零或一个”关系。我想我可能已经找到了使用多对一方法。

class A {
  private B b;
  // ... getters and setters
}

class B {
  private A a;
}

A类的映射指定:

<many-to-one name="b" class="B" 
insert="false" update="false" 
column="id" unique="true"/>

B类的映射指定:

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

我想在数据库中找不到B的匹配行时b为null。所以我可以做到这一点(在A类中):

if (b == null)

但是,看来b永远不会为空。

我该怎么办?


阅读 213

收藏
2020-06-20

共1个答案

一尘不染

答案是在A中的多对一语句中添加not-found =“ ignore”:

<many-to-one name="b" class="B" not-found="ignore" insert="false" update="false" column="id" unique="true"/>

我尝试按照Rob H的建议,简单地向B添加lazy =“
false”,但是每次加载不带B的A时,都会导致HibernateObjectRetrievalFailureException。

请参阅本主题以获取更多信息:

https://forum.hibernate.org/viewtopic.php?p=2269784&sid=5e1cba6e2698ba4a548288bd2fd3ca4e

2020-06-20