2012-05-03 18 views
9

मुझे एक OneToMany-Association से बच्चों को हटाने में कठिनाई हो रही है। मेरे संस्थाओं:@ OneToMany- एसोसिएशन से बच्चों को हटा रहा है: CascadeType.ALL + orphanRemoval = सच काम नहीं कर रहा

@Entity 
@Table(name = "PERSON") 
public class PersonEntity extends BaseVersionEntity<Long> implements Comparable<PersonEntity> 
{ 
    ... 
    // bi-directional many-to-one association to Project 
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "person", orphanRemoval = true) 
    private final Set<ProjectEntity> projects = new HashSet<ProjectEntity>(); 
    ... 

@Entity 
@Table(name = "PROJECT") 
public class ProjectEntity extends BaseVersionEntity<ProjectPK> 
{ 
    @EmbeddedId 
    private ProjectPK id; 
    ... 
    // bi-directional many-to-one association to UdbPerson 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "PERSON_ID", nullable = false, insertable = false, updatable = false) 
    private PersonEntity person; 
    ... 

@Embeddable 
public class ProjectPK implements Serializable 
{ 
    // default serial version id, required for serializable classes. 
    private static final long serialVersionUID = 1L; 

    @NotNull 
    @Column(name = "PERSON_ID") 
    private Long personId; 
    ... 

मेरे असफल बच्चे को हटाने का प्रयास:

personEntity.getProjects().clear(); 

यह काम करता है, लेकिन मैं सही दृष्टिकोण लगता है कि thats नहीं है:

for (Iterator<ProjectEntity> iterator = personEntity.getProjects().iterator(); iterator.hasNext();) 
{ 
    ProjectEntity projectEntity = iterator.next(); 
    projectDao.deleteEntity(projectEntity); 
    iterator.remove(); 
} 

मैं क्या कर रहा हूँ यहाँ गलत है?

धन्यवाद
जॉनी

उत्तर

14

संघ द्विदिश है, और एक द्विदिश संघ के मालिक की ओर से एक है जहाँ कोई mappedBy विशेषता नहीं है। इसका मतलब है कि इस मामले में, स्वामित्व पक्ष परियोजना पक्ष है।

हाइबरनेट केवल मालिक को यह जानने के लिए मानता है कि एसोसिएशन मौजूद है या नहीं। इसका मतलब है कि किसी व्यक्ति और एक परियोजना के बीच संबंध तोड़ने के लिए, आपको परियोजना में व्यक्ति को null पर सेट करना होगा।

+0

धन्यवाद जेबी निजेट, यह चाल है। यहां कोड: 'के लिए (Iterator iterator = personEntity.getProjects()। Iterator(); iterator.hasNext();) { ProjectEntity projectEntity = iterator.next(); projectEntity.setPerson (शून्य); iterator.remove(); } ' – user871611

+0

क्या होगा यदि व्यक्ति शून्य नहीं हो सकता है? –

+0

@IgorG। यदि व्यक्ति शून्य नहीं हो सकता है, तो एसोसिएशन को हटाने का कोई मतलब नहीं है। –