Hibernate: Supprimer un élément d'une liste ne persiste pas

J'ai de la difficulté lors de la suppression d'un élément dans une liste. La liste est définie dans une super-classe, mais les Hibernate annotations sont appliquées à des accesseurs de propriété dans une sous-classe. Il existe deux méthodes de la super-classe pour manipuler la liste. Le "ajouter" méthode fonctionne très bien, mais le "supprimer" ne pas conserver les modifications. J'ai vérifié mes Cascade de paramètres, et j'ai l'impression d'avoir des choses à corriger. Suis-je en train de faire quelque chose qui est impossible. Si non, suis-je en train de faire quelque chose de mal?

Voici mes classes:

@Entity 
abstract class Temporal<T> { 
    @Id 
    @GeneratedValue 
    private Long id; 

    @Version 
    private Integer version = null; 

    @Transient 
    protected List<T> content = new ArrayList<T>(); 

    public void remove(T value) { 
        //business logic ... 
        content.remove(value); 
    } 

    public void add(T value) { 
        //business logic ... 
        content.add(value); 
    } 
} 

@Entity 
@AccessType("property") 
class TemporalAsset extends Temporal<Asset> { 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "temporal") 
    public List<Asset> getContent() { 
        return super.content; 
    } 

    protected void setContent(List<Asset> list) { 
        super.content = list; 
    } 
} 

Je utiliser une instance de la TemporalAsset classe comme suit (notez que je suis, utilisez uniquement le "refresh" méthode pour démontrer le comportement. La liste ne persiste pas correctement, même si je tire la chasse, ou fermez la session et ouvrez une nouvelle session):

temporalAsset.add(value1); 
temporalAsset.getContent().size() == 1; //true 
session.update(temporalAsset); 

session.refresh(temporalAsset); 

temporalAsset.getContent().size() == 1; //true 

temporalAsset.remove(value1); 
temporalAsset.getContent().size() == 0; //true 
session.update(temporalAsset); 

session.refresh(temporalAsset); 

temporalAsset.getContent().size() == 0; //false, its 1 

Grâce.

source d'informationauteur codefinger | 2009-02-14