에서 @EmbeddedId 내에서 내가 추가 데이터 교차 테이블을 추가 해요 내가 이 표에 기록에 의해 바인딩 된 개체에 대한 복잡한 ID를 만들기 위해을 @EmbeddedId 사용 (entity1 및 entity2).캐스케이드 최대 절전
Entity1ToEntity2Link에서@OneToMany(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH},
fetch = FetchType.LAZY, mappedBy = "id.entity1")
private List<Entity1ToEntity2Link> links = new ArrayList<>();
내가 @EmbeddedId이 있고 그 안에 내가 링크가 있습니다
가 나는 그래서 엔티티 1. 저장할 때 캐스케이드를 통해 모든 데이터를 저장하려면, 그 실체 일에 내가 가지고있는 이유 두 개체. 그러나, 나는 엔티티 1. 그래서, 이런 식으로 만들어 저장할 때 두 번째 저장하려는 :
이@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private Entity2 entity2;
그러나, unfortunatelly, 내가 @EmbeddedId 내부에있는 폭포가 무시 될 것으로 보인다. 나는 삽입에 대한 그 SQL이 생성되지 않습니다 볼 수 있고 Entity1ToEntity2Link가 저장 될 때 나는 오류 얻을 :
violated - parent key not found
내가 @EmbeddedId이 폭포를 지원하지 않는 것으로 생각합니다. 그러나, 나는 확실하지 않다. Entity1ToEntity2Link가 저장되기 전에 entity2를 저장할 수있는 아이디어가 있습니까?
아이디 개체 : 대신 Entity1ToEntity2Link가 직접 ManyToMany 관계를하려고 사용
@Embeddable
public class LinkId extends AbstractLinkId {
//...
@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private Entity2 entity2;
//...
}
@MappedSuperclass
public class AbstractLinkId {
//...
@ManyToOne
private Entity1 entity1;
//...
}
두 번째 해결책이 저에게 효과적입니다. 자동 생성 된 ID를 추가하고 이전 ID를 @ 삽입 된 객체로 만듭니다. 그러나 @ EmbeddedId가 캐스 캐 이드 저장을 지원하지 않는 이유는 무엇입니까? 문서화되어 있습니까? – dvelopp