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进行初始化。