2017-09-05 32 views
1

親(Solicitud)がカスケードとして定義されている子エンティティ(SolicitudArxiu)は削除できません。JPAとのOneToMany関係の子エンティティを削除できません

親(カスケード)エンティティ内の関係の定義は、カスケードを削除すると削除が機能するため、子からの削除に影響するようです。

子供(SolicitudArxiu)を強制的に削除するフォームはありますか?

SolicitudArxiuManager(削除する子実体)

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(親エンティティ)

@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; 
    ... 

enter image description here

答えて

0

あなたは所有側から関係を削除せずにエンティティを削除することはできませんので、最初に関係を削除してから、あなたの子供を削除してください。

+0

これは私がやろうとしていることですが、t_solicitudとt_arxiuの関係を削除しようとしていますが、em.removeを実行した後もエンティティはそこに残ります。 ¿? – Joe

+0

エンティティを削除するときにjpa 2.0以上を使用している場合、orphanRemovalをtrueに定義しないかぎり、子が残ります。そのため、エンティティとの関係を削除するかorphanRemovalをtrueに定義するかのどちらかで、 –

+0

@Joe私はちょうどorphanRemovalが設定されていることに気がつきましたが、関係を削除すると子を取り除くのに十分です –

0

最後に、createNativeQueryを使用して簡単なやり方でJPA関係の制限を避けることにしました。

em.createNativeQuery("DELETE FROM r_solicitudArxiu WHERE id = ?") 
    .setParameter(1, id) 
    .executeUpdate(); 
関連する問題