2011-10-31 3 views
0

J'ai quelques problèmes pour effacer un contenu quand il y a beaucoup de relations avec un autre objet.Hibernate ManyToMany Delete

Pour effectuer je supprimer un tableau de requête nommée et de supprimer, je boucle dans le tableau et effectuer supprimer, entité par entité, comme ceci:

private static final String[] DELETE_CONTENT_QUERY_NAMES = { 
    "Entity1.deleteByContentId", 
    "Entity2.deleteByContentId", 
    "Entity3.deleteByContentId", 
    "Entity4.deleteByContentId", 
    "Entity5.deleteByContentId", 
    "EntityWithManyToMany.deleteByContentId", 
    "Entity7.deleteByContentId", 
    "Content.DeleteByContent" 
}; 

@Override 
@Transactional 
public void deleteContent(Content content) throws Exception{ 
    Map<String, Object> params = new HashMap<String, Object>(); 
    params.put("contentId", content.getContentId()); 
    for (String queryName : DELETE_CONTENT_QUERY_NAMES) { 
     dao.batchDeleteByNamedQuery(queryName, params); 
    } 
} 

Lorsque itération essayez d'effectuer EntityWithManyToMany.deleteByContentId Requête batch HQL, je peux voir sur les logs l'instruction SQL traduite, mais suivie d'un ensemble d'insert de la même ligne et MySQL me renvoie à juste titre une erreur de contrainte.

Ceci est mon nombre à plusieurs objets de relation je tente de supprimer:

@Entity 
@Embeddable 
public class CategoryContent implements java.io.Serializable { 

    /*** 
    * Private Declarations 
    */ 
    @EmbeddedId 
    @AttributeOverrides({ 
     @AttributeOverride(name = "contentId", column = @Column(
       name = "CONTENT_ID", 
       nullable = false, precision = 10, scale = 0)), 
     @AttributeOverride(name = "categoryId", column = @Column(
       name = "CATEGORY_ID", 
       nullable = false, precision = 10, scale = 0)) 
    }) 
    @NotNull 
    private CategoryContentId id; 

    @ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.PERSIST) 
    @JoinColumn(name = "CATEGORY_ID", insertable=false, updatable=false) 
    private Category category; 

    @ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.PERSIST) 
    @JoinColumn(name = "CONTENT_ID", insertable=false, updatable=false) 
    private Content content; 

    @Column(name = "PRIORITY", nullable = true) 
    private Integer priority; 
} 

Pensez-vous qu'il est possible que le problème concerne CascadeTypes? Comment puis-je resoudre ceci?

Toutes les suggestions sont appréciées! Merci beaucoup, Davide.

Répondre

0

Vous êtes sur la bonne voie - essayez de modifier votre cascade

cascade = {CascadeType.PERSIST, CascadeType.DELETE} 

Cela devrait fonctionner parce que vous avez une table de jointure.

+0

ne fonctionne malheureusement pas, hiberner a le même comportement – Davide

Questions connexes