Spring data JPA: Как каскадно удалить дочерний элемент OneToMany, который joincolumn также является полем Id - PullRequest
0 голосов
/ 16 октября 2019

У меня есть определение сущности следующим образом:

Родитель:

@Entity
@Table( name = "Case" )
public class Case implements Serializable {

    @Id
    @Size ( max = 40 )
    private String caseid;
    .....
    @OneToMany ( cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true )
    @JoinColumn ( name = "caseid" )
    List< CaseFollowup > followups = new ArrayList<>();
    .....
}

Child IdClass

public class CaseDetailPK implements Serializable {

    private String caseid;
    private String detailid;
    .....
    @Override
    public boolean equals( Object o ) {
    .....
    }
    @Override
    public int hashCode() {
    .....
    }
}

Child

@Entity
@Table ( name = "casefollowup" )
@IdClass ( CaseDetailPK .class )
public class CaseFollowup implements Serializable {
    @Id
    @Size ( max = 40 )
    private String caseid;

    @Id
    @Size ( max = 40 )
    private String detailid;
    .....
}

Здесь янатолкнулся на два вопроса:

  1. Когда я пытался получить такие случаи, как:
List<Case> cases = caseRepository.findAll();

case.getFollowups () возвращает:

unable to evaluate the expression method threw 'org.hibernate.lazyinitializationexception' exception.
Когда я пытался удалить случаи с помощью caseRepository.deleteAll (case), я получил ошибки:
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "CASEID"; SQL statement:
update casefollowup set caseid=null where adrcaseid=?

Не имею понятия, как их исправить. Может ли кто-нибудь помочь мне исправить их? Большое спасибо.

...