lazyloading何时将子级添加到父级的问题-hibernate

h79rfbju  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(255)

我有两个类:bundle和commodity,它们被定义为双向关系。假设我只有1个bundle实体,0个commodity实体。如何创建商品并在商品和捆绑包之间建立关系?

@OneToMany(mappedBy="id", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
List<Commodity> commodityList;

@ManyToOne
@JoinColumn(name="BUNDLE_ID")
private Bundle bundle;

在我的服务课上,我尝试过:

// Add commodity instance to exiting bundle.
public void addCommodityToBundle(Bundle bundle, Commodity commodity) {
    LOGGER.info("Create and Persist Commodity Instance to Bundle Entity");
    Bundle attachBundle = bundleDao.merge(bundle);

    attachBundle.getCommodityList().add(commodity);
    commodity.setBundle(attachBundle);
    bundleDao.update(attachBundle);
}

通过上述方法,我第一次跑步没有问题。但在其他运行中,我得到了dataintegrityexception,原因是:

Caused by: org.postgresql.util.PSQLException: ERROR: insert or update on table "commodity" violates foreign key constraint "fk_imi7xke3iqtx6d3g7ceqfs7ud"
  Detail: Key (id)=(2) is not present in table "bundle".

如果我再做一次测试,我就会

Detail: Key (id)=(3) is not present in table "bundle".

我不知道为什么它一直试图与不存在的实体建立联系。我已经让很多记录器尝试调试并确保包存在于表中。你知道我该怎么做才能纠正这个错误吗?

mklgxw1f

mklgxw1f1#

这个
@OneToMany mappedBy Map错误。
而不是:

@OneToMany(mappedBy="id", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
List<Commodity> commodityList;

你应该有:

@OneToMany(mappedBy="bundle", fetch=FetchType.LAZY, cascade=CascadeType.ALL)
List<Commodity> commodityList;

相关问题