Hibernate一到零或一个映射

我试图在Hibernate中将一个映射到“零或一”关系。 我想我可能找到了一种使用多对一的方法。

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

A类的映射指定:

  

和B类的映射指定:

  

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

 if (b == null) 

但是,似乎b永远不会为空。

我该怎么办?

就像Boden所说,答案是在A中的多对一语句中添加not-found="ignore" 。使用注释执行此操作:

在A类:

 @ManyToOne @Cascade({ CascadeType.ALL }) @JoinColumn(name = "Id") @NotFound(action=NotFoundAction.IGNORE) private B b 

在B类:

 @Id @GeneratedValue(generator = "myForeignGenerator") @org.hibernate.annotations.GenericGenerator( name = "myForeignGenerator", strategy = "foreign", parameters = @Parameter(name = "property", value = "a") ) private Long subscriberId; @OneToOne(mappedBy="b") @PrimaryKeyJoinColumn @NotFound(action=NotFoundAction.IGNORE) private A a; 

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

  

我试着像Rob H推荐的那样简单地将lazy =“false”添加到B,但每次加载没有B的A时都会导致HibernateObjectRetrievalFailureException。

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

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

尝试在多对一元素上设置lazy =“false”。 这应该强制Hibernate在加载第一个对象(“A”)时尝试获取关联(“B”)。 “A”中的属性将使用“B”的实例或null进行初始化。