JPA/Hibernate:删除@OneToOne引用的不可变实体不起作用



我有一个主表Lot和一个数据库视图LotValues(其中包含一些计算字段…(。视图LotValues具有与Lot相同的id

这是主要实体Lot:

@Entity
@Table(name = "FDE_LOT")
public class Lot {
@Id
private String id;
private String name;
@OneToOne(mappedBy = "lot", fetch = FetchType.LAZY)
private LotValues lotValues;
}

这是数据库视图LotValues,所以我将其定义为@Immutable实体:

@Entity
@Immutable
@Table(name = "FDE_LOT_VALUES")
public class LotValues {
@Id
private String id;
@MapsId
@JoinColumn(name = "id")
@OneToOne(fetch = FetchType.LAZY)
private Lot lot;
private Double size;
}

当我调用lotRepository.delete(id)时,Hibernate对Lot实体和LotValues实体执行两个SELECT查询,但不执行DELETE查询。

如果我删除主实体Lot中的@OneToOne(mappedBy = "lot", fetch = FetchType.LAZY),则执行DELETE查询。

为什么这样?也许@Immutable实体主键的定义是错误的?

已解决设置为空引用

LotValues lotValues = lotValuesRepository.findOne(id);
lotValues.setLot(null);
Lot lot = lotRepository.findOne(id);
lot.setLotValues(null);
lotRepository.delete(id);

最新更新