2012-07-02 44 views
3

我有一个实体ENTITY1一对多关系与ENTITY2如下:无法从@OneToMany集合中删除元素

1 ENTITY1:

@Entity 
@Table(name = "Entity1", catalog = "mydb") 
public class Entity1 implements java.io.Serializable { 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "entity1", cascade = javax.persistence.CascadeType.ALL) 
    @OrderBy("id") 
    private Set<Entity2> collection = new HashSet<Entity2>(
      0); 

} 

2-实体2:(等于和重写的哈希码方法)

@Entity 
@Table(name = "entity2", catalog = "advertisedb") 
public class Entity2 implements java.io.Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "pkid", unique = true, nullable = false) 
    @Basic(fetch = FetchType.EAGER) 
    private long id; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "fk_entity1", nullable = false) 
    private Entity1 entity1; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "apid", nullable = false) 
    private Entity3 entity3; 

} 

3-下面是我从集合中移除的实体:

entity1Obj.getEntity2().remove(entity2); 
    log.debug("size after remove: "+ entity1Obj.getEntity2().size()); // size decreases correctly, so the entity is removed from the collection 
    entity1Dao.updateEntity1(entity1); 

4- DAO方法:

public void updateEntity1(Entity1 entity1) { 
     getCurrentSession().update(getCurrentSession().merge(entity1)); 
    } 

问题:是我所得到的控制台,是应该删除的实体2的选择查询,并且没有删除查询,并且没有被删除。

请指教如何解决此问题。

回答

4

我用cascade = CascadeType.ALL替换为orphanRemoval = true,它现在工作正常。