【问题标题】:Removing Many to one relationship in JPA using merge()使用 merge() 删除 JPA 中的多对一关系
【发布时间】:2012-02-24 08:01:52
【问题描述】:

我有以下单向多对一映射

@Entity
public class Item implements Serializable {
    private Integer id;
    private Double amount;
        private Country origin;

    @ManyToOne(optional=true)
    @JoinColumn
    public Country getOrigin() {
        return this.origin;
    }
}

@Entity
public class Country implements Serializable{

    private String code;
    private String desc;
}

假设关系是可选的,所以我试图通过使用下面的代码将其更新为 null 来删除关系

Country country = null;
//item is detached
item.setOrigin(country);
em.merge(item);

但结果是没有删除关系。 但是,如果country 不为空并且系统可以更新数据库中的关系,则此代码可以正常工作。 如果它为空,它只是简单地忽略该字段。 有人可以指出可以更改哪些设置以达到我想要的结果吗?

附:请注意,我不想删除实体Country,只是删除它们之间的关系。

【问题讨论】:

  • 假设您实际上拥有setOrigin,这应该可以工作。也许你应该试试em.flush() 看看你是否得到了你所期望的?
  • 可能是个愚蠢的问题,但是 setter 长什么样子?
  • 我认为 cascade=Cascade.MERGE 在这种情况下会有所帮助。 @ManyToOne(optional=true, cascade=Cascade.MERGE)

标签: java hibernate jpa jpa-2.0 many-to-one


【解决方案1】:

谢谢,这是一个错误的问题。它确实有效。

只是有一些客户端问题向它提交了错误的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 2021-08-08
    • 2018-05-14
    相关资源
    最近更新 更多