2011-11-08 4 views
1

Eclipselink에서 일대 다 관계로 매핑되는 개인 소유의 엔터티를 삭제할 수 없습니다. 개인 소유의 엔터티를 일대 다 컬렉션에서 제거하고 부모에 대한 참조를 NULL로 설정 한 다음 부모를 저장하면 개인 소유의 엔터티가 데이터베이스에서 제거되지 않습니다. 그러나 개체에서 제거되고 나머지 세션 동안 개인 소유의 엔터티가 실제로 제거 된 것처럼 보입니다.개인 소유의 일대 다 항목을 EclipseLink에서 제거하지 않음

여기에 하나의 매핑

@OneToMany(mappedBy="parent", cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch=FetchType.EAGER) 
@PrivateOwned // should prevent orhpans, but doesn't. 
List<PrivatelyOwnedEntity> privatelyOwnedEntities; 
내가 캐스케이드 모든 추가 시도하고, 또한 @CascadeOnDelete을 추가 한

, 하나는 영향이 없을 것이라고 생각 것 그 모든 조합이고, 그것은하지 않았다.

otherside : I는 (널 = 거짓)를 첨가 JoinColumn 또한 @ManyToOne 주석 및 이들 annotaitons의 존재/제거의 모든 조합을 제거하는 시도

@ManyToOne 
private Parent parent; 

. 어떤 변화도 영향을 미치지 않았습니다.

제거 코드 :

public boolean removePrivatelyOwnedEntity(int i) { 
    PrivatelyOwnedEntity privatelyOwnedEntityToBeRemoved = this.privatelyOwnedEntities.get(i); 
    //privatelyOwnedEntityToBeRemoved.setParent(null); 
    return this.privatelyOwnedEntities.remove(privatelyOwnedEntityToBeRemoved); 
} 

코드가 업데이트 :

projectManager.saveProject(project); 
//so this privatelyOwnedEntity is deep within this object. 
// Its project.site.siteMap.parents.privatelyOwnedEntities. 
// SiteMap is embedded in Site. 
// On save it calls a dao, and the dao's abstract class handles the update 
// as shown below using Springs JpaTemplate 

저장 코드 :

public T save(T object) { 
    return getJpaTemplate().merge(object); 
} 
+0

부모에게 읽는 데 사용 된 코드를 표시하고 변경하고 유지할 수 있습니까? – Chris

+0

물론 위의 추가 코드를 추가했습니다. – Ceniza

답변

1

객체의 ID의 상위 부분인가?

부모를 null로 설정하지 마십시오. 개인 소유의 개체에 대해서는이 작업을 수행하지 말고 컬렉션에서 제거하십시오.

+0

답장을 보내 주셔서 감사합니다. 불행히도, 그것은 작동하지 않았다. 다른 아이디어? 나는 당신이 "개체의 ID의 부모 부분인가?"라는 의미가 확실하지 않습니다. 개인 소유의 엔터티는 id에 대한 ID 전략을 사용합니다. @GeneratedValue (strategy = GenerationType.IDENTITY) – Ceniza

+0

원래 질문에 몇 가지 추가 코드를 추가했습니다. – Ceniza