Ale*_*lex 15 java persistence hibernate jpa
我们正在使用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;
Run Code Online (Sandbox Code Playgroud)
当数据库中存在此关联时,一切正常.当它不是时,我得到一个javax.persistence.EntityNotFoundException
我想要的而不是异常,如果该关联不存在,则将该字段设为NULL.
我尝试了好几种不同的东西,例如,使用可选=真正的关系注释(顺便说一句这是默认选项),把它作为可空,等似乎没有这样的伎俩,好像被忽略了所有这些选项.
我发现很多链接提到了这个相同的问题(以及stackoverflow中的一些问题),但是在所有这些问题中,建议是使用@NotFoundHibernate中的注释.但是我们不想对Hibernate有任何依赖(我们希望保持所有纯粹的JPA).
你们中的任何人都知道解决这个问题吗?
非常感谢你的帮助!
以下是此问题的替代解决方案.我不得不建立在一个旧数据库的基础上,这个数据库的关系有时会被破坏.这就是我只使用JPA解决它的方法.
@PostLoad
public void postLoad(){
try {
if(getObject() != null && getObject().getId() == 0){
setObject(null);
}
}
catch (EntityNotFoundException e){
setObject(null);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
在对应的实体类中添加一个测试怎么样:
public boolean getHasSecond() {
if (this.Second != null) {
return true;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
像这样,您可以检查关系是否存在......
| 归档时间: |
|
| 查看次数: |
31337 次 |
| 最近记录: |