Java JPA/Hibernate:删除@OneTONE不可变实体引用的实体无效
我有一个主表Java JPA/Hibernate:删除@OneTONE不可变实体引用的实体无效,java,hibernate,jpa,spring-data-jpa,Java,Hibernate,Jpa,Spring Data Jpa,我有一个主表Lot和一个数据库视图LotValues(其中包含一些计算字段…)。 视图LotValues具有与Lot相同的id 这是主要实体批次: @Entity @Table(name = "FDE_LOT") public class Lot { @Id private String id; private String name; @OneToOne(mappedBy = "lot", fetch = FetchType.LAZY) priva
Lot
和一个数据库视图LotValues
(其中包含一些计算字段…)。
视图LotValues
具有与Lot
相同的id
这是主要实体批次
:
@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)
,则执行删除查询
为什么会这样?可能@Immutable实体的主键定义错误?解决了将引用设置为null的问题
LotValues lotValues = lotValuesRepository.findOne(id);
lotValues.setLot(null);
Lot lot = lotRepository.findOne(id);
lot.setLotValues(null);
lotRepository.delete(id);
已解决设置为空引用的问题
LotValues lotValues = lotValuesRepository.findOne(id);
lotValues.setLot(null);
Lot lot = lotRepository.findOne(id);
lot.setLotValues(null);
lotRepository.delete(id);
您是否在OneTONE映射中尝试使用
cascade=CascadeType.ALL
?是否在OneTONE映射中尝试使用cascade=CascadeType.ALL
?