jpa保留外国收藏

时间:2015-04-21 06:54:20

标签: java jpa

我有一个像这样的实体:

@Entity
@Table(name = "THISBEAN")
public class ThisBean {
    ...
@OneToMany(targetEntity = SomeBean.class, mappedBy = "thisBean", fetch = FetchType.LAZY,
        cascade = {CascadeType.PERSIST, CascadeType.DETACH})
private List<SomeBean> bean;

...
}

当我删除ThisBean时,应该保留SomeBean。它运行正常,当我以后想要使用entityManager.find(persistentClass, id);访问SomeBean时,它会让我异常javax.persistence.EntityNotFoundException: Unable to find com.xxx.yyy.ThisBean with id someId 我查看了表SomeBean,并引用了引用ThisBean的外键。我该如何解决它以便以后可以从数据库访问SomeBean实例?这是SomeBean类的代码:

@Entity
@Table(name = "SOMEBEAN")
public class SomeBean {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "THISBEAN")
private ThisBean thisBean;

...
}

1 个答案:

答案 0 :(得分:0)

小偷杀死了蝙蝠侠的父母,是的,蝙蝠侠有父母和傻瓜。记忆,但他们不能帮助他们活着

当您调用em.remove(id);数据库行从数据库中删除时。 当您调用em.find(SomeClass.class, id);时,entityManager尝试查找具有匹配主键的行,因此您获得了javax.persistence.EntityNotFoundException

  

如何解决它以便以后可以从数据库访问SomeBean实例?这是SomeBean的代码

即使您可以通过执行某些jpql函数或其他方式从ThisBean获取SomeBean的id,ThisBean数据库表也不包含任何带有mathing的行id 1}}所以不可能让实体回来。

如果您确实想要这样做,请创建一个具有相同id的新实体,然后调用em.persist(thisBeanEntity),使其托管,然后再次调用em.find(id)

修改

在您移除 ThisBean 之前,请尝试从null

将其设置为SomeBean
someBean.setThisBean(null);

这样您就可以打破关系,外键列值将为null

请记住,维护实体关系是应用程序(或开发人员)的责任,而不是jpa实现。

即使您使用双向关系,也需要从任意一侧设置两个实体。