我有一个主表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);