【问题标题】:Can't delete element from @OneToMany collection无法从 @OneToMany 集合中删除元素
【发布时间】:2012-07-02 13:57:17
【问题描述】:

我有一个实体 Entity1Entity2 具有 一对多 关系,如下所示:

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- Entity2:(等于和哈希码方法被覆盖)

@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));
    }

问题:我在控制台中得到的是应该删除的 entity2 的选择查询,没有删除查询,也没有任何内容被删除。

请告知如何解决此问题。

【问题讨论】:

    标签: java hibernate jakarta-ee jpa one-to-many


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 2017-08-23
      • 1970-01-01
      相关资源
      最近更新 更多