我们正在使用 JPA 从数据库加载一些内容。一些实体之间可能有可选的关系,例如
@Entity
public class First {
....
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
@JoinColumns(value = {
JoinColumn(name = "A_ID", referencedColumnName = "A_ID", insertable = false, updatable = false),
JoinColumn(name = "B_ID", referencedColumnName = "B_ID", insertable = false, updatable = false)})
private Second second;
当数据库中存在此关联时,一切工作正常。当它不是时,我会得到一个javax.persistence.EntityNotFoundException
我想要的是,如果关联不存在,则将该字段设置为 NULL,而不是例外。
我尝试过几种不同的事情,例如在关系注释中使用Optional=true(顺便说一句是默认选项),将其设置为Nullable等。似乎没有什么可以解决问题,似乎所有这些选项都被忽略了。
我发现很多链接都提到了同样的问题(以及 stackoverflow 中的一些问题),但在所有链接中,建议是使用@NotFound
来自 Hibernate 的注释。但我们不希望对 Hibernate 有任何依赖(我们希望保持一切纯 JPA)。
你们中有人知道解决这个问题的其他方法吗?
非常感谢您的帮助!
以下是此问题的替代解决方案。我必须建立在旧数据库之上,其中关系有时会损坏。这就是我仅使用JPA解决它的方法。
@PostLoad
public void postLoad(){
try {
if(getObject() != null && getObject().getId() == 0){
setObject(null);
}
}
catch (EntityNotFoundException e){
setObject(null);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)