如何以一对多关系删除子实体

时间:2015-01-27 15:06:07

标签: jpa one-to-many

我正在使用后端的RESTful API(Spring MVC)和JPA(Spring Data JPA存储库)以及前端的AngularJS开发应用程序。
我有两个类:ClientAddress,一个客户端可以有多个地址。

我的问题是删除一个地址时出错。这是我的两个实体:

@Entity
@Table(name = "T_CLIENT")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Client implements Serializable {
    ...
    @OneToMany(mappedBy = "client", fetch = FetchType.EAGER)
    @JsonIgnore
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<Adresse> adresses = new HashSet<>();
    ...
}

@Entity
@Table(name = "T_ADRESSE")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Adresse implements Serializable {
    ...
    @ManyToOne
    private Client client;
    ...
}

我删除地址的网络资源方法:

@RequestMapping(value = "/rest/adresses/{id}",
        method = RequestMethod.DELETE,
        produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public void delete(@PathVariable Long id) {
    adresseRepository.delete(id);
}

我想说我要删除id = 9的Address。删除完成后,我正在使用他的地址加载Client,我收到此错误:

  

[ERROR]   org.apache.catalina.core.ContainerBase。[Tomcat的]。[本地主机]。[/]。[DispatcherServlet的]    - 用于servlet [dispatcherServlet]的Servlet.service()在上下文中,路径[]引发异常[请求处理失败;嵌套异常   是org.springframework.orm.jpa.JpaObjectRetrievalFailureException:   无法找到ID为9的com.myapp.domain.Adresse;
  嵌套异常是   javax.persistence.EntityNotFoundException:无法找到   具有id 9的com.myapp.domain.Adresse具有根本原因   javax.persistence.EntityNotFoundException:无法找到   com.myapp.domain.Adresse,ID为9

我的猜测是我没有以正确的方式删除实体Address

1 个答案:

答案 0 :(得分:1)

首先,我不知道为什么你在类级别和字段级别在Client类中具有相同的注释:   - @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

如果需要,您可以离开现场。

尝试从Client类中注释掉此缓存策略注释,如果有效,则必须检查缓存配置。

希望它有所帮助。