2017-09-05 7 views
1

Ich kann eine untergeordnete Entität (SolicitudArxiu) mit übergeordneter Komponente (Solicitud), die als Cascade definiert ist, nicht löschen, wie unten zu sehen ist.Untergeordnete Entität der OneToMany-Beziehung kann nicht mit JPA gelöscht werden

Es scheint, dass die Definition der Beziehung in der übergeordneten (Kaskade) Entität Auswirkungen auf die Löschung von Kind hat, weil wenn ich die Kaskade entfernen, dann funktioniert die Löschung.

Gibt es ein Formular, um die Löschung eines Kindes (SolicitudArxiu) zu erzwingen?

SolicitudArxiuManager (Kind Entität zu löschen)

public void delete(int id) { 
    try { 
     SolicitudArxiu reference = this.em.getReference(SolicitudArxiu.class, id); 
     this.em.remove(reference); 
    } catch (EntityNotFoundException e) { 
     //we want to remove it 
     logger.error("Entity not found exeption: ", e); 
    } 
} 

Solicitud (Muttergesellschaft)

@Entity 
@Table(name = "t_solicitud") 
public class Solicitud implements Serializable { 
... 
    @OneToMany(mappedBy = "solicitud", cascade = CascadeType.ALL, orphanRemoval = true, 
      fetch = FetchType.EAGER) 
    private Collection<SolicitudArxiu> sarxius; 
    ... 

SolicitudArxiu.java

@Entity 
@Table(name = "r_solicitudArxiu", 
     uniqueConstraints = @UniqueConstraint(columnNames = {"idSolicitud","idArxiu"})) 
public class SolicitudArxiu implements Serializable { 
... 
    @ManyToOne 
    @Basic(optional = false) 
    @JoinColumn(name = "idSolicitud", referencedColumnName = "id", 
      foreignKey = @ForeignKey(name = "solicitudArxiu2solicitud")) 
    private Solicitud solicitud; 

    @ManyToOne 
    @Basic(optional = false) 
    @JoinColumn(name = "idArxiu", referencedColumnName = "id", 
      foreignKey = @ForeignKey(name = "solicitudArxiu2arxiu")) 
    private Arxiu arxiu; 
    ... 

Antwort

0

Sie können die Entität nicht löschen, ohne die Beziehung von der besitzenden Seite zu entfernen. Entfernen Sie zuerst die Beziehung und entfernen Sie dann Ihr Kind.

+0

Es ist, was ich versuche zu tun, ich versuche, die Beziehung zwischen t_solicitud und t_arxiu zu löschen, aber nach execute em.remove bleibt die Entität dort. ¿? – Joe

+0

Wenn Sie beim Entfernen der Entity jpa 2.0 oder höher verwenden, bleibt das Kind erhalten, es sei denn, Sie definieren das orphanRemoval als true. Entfernen Sie entweder die Relation und dann die Entity, oder definieren Sie das orphanRemoval als true, wenn die Relation entfernt wird wird entfernt –

+0

@Joe Ich habe gerade bemerkt, dass Sie bereits die orphanRemoval gesetzt haben, dann Entfernung der Beziehung wird genug sein, um das Kind zu entfernen –

0

Ich entschied mich schließlich, es einfach mit einer createNativeQuery zu machen, und die Einschränkungen der JPA-Beziehung zu vermeiden.

Verwandte Themen