jpa存储库删除子节点而不加载父集合

时间:2016-05-03 16:08:55

标签: jpa spring-data-jpa

我正在尝试使用Child的存储库删除子实体。我不想在Parent中加载整个Child集合并从那里删除一个Child,因为在某些情况下集合很大并且可能导致内存问题。但是当我使用Parent Repository加载Parent时删除一个孩子后,我得到一个错误,上面写着"删除的实体已经传递给了#34;。

@Entity
@Table(name="USR")
public class User {

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user", orphanRemoval=true)
    private Set<UserApplication> userApplications = new HashSet<UserApplication>();

}


@Entity
@Table(name="USR_2_APL")
public class UserApplication  {

    @ManyToOne
    @JoinColumn(name = "USR_SK")
    private User user;

}


@Test
public void testDeleteUserApp() {

    List<UserApplication> removedUserApp = userApplicationRepository.findByUserSkAndApplicationSk(1, 5);

    userApplicationRepository.delete(removedUserApp);

    //*****This is where I see an error that says 
    //org.springframework.orm.jpa.JpaObjectRetrievalFailureException: deleted entity passed to persist: [UserApplication#<null>]; nested exception is javax.persistence.EntityNotFoundException
    userRepository.findByUserLoginName(loginId); 
}   

1 个答案:

答案 0 :(得分:0)

我不知道这对你有帮助,但我有类似的东西,这就是我删除数据的方法......

在存储库中我有一个这样的方法: -

@Transactional
public Long deleteByByUserSkAndApplicationSk(int userSk, int applicationSk);

方法的输出是删除的行数。

然后您可以直接调用要删除的方法。