当前位置: 首页 > 知识库问答 >
问题:

对象引用未保存的瞬态实例 - 在刷新错误之前保存瞬态实例

轩辕经国
2023-03-14

对象引用未保存的瞬态实例 - 在刷新错误之前保存瞬态实例

我有 3 个实体。我将使用一对多关系映射彼此实体。

产品收费详情有

@Data
@Entity
public class ProductChargeDetail extends SuperEntity<ProductChargeDetailDto> {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false)
    private Long productChargeDetailId;
    @ManyToOne
    @JoinColumn(name = "fuel_type")
    private FuelType fuelType;

    @ManyToOne
    @JoinColumn(name = "cal_type")
    private CalculationType calculationType;


    @Override
    public ProductChargeDetailDto toDto(ModelMapper modelMapper) {
        if (this.fuelType != null)
            productChargeDetailDto.setFuelTypeCode(this.fuelType.getFuelType());
        if (this.calculationType != null)
            productChargeDetailDto.setCalType(this.calculationType.getCalType());
        return productChargeDetailDto;
    }
}

燃料类型有

@Data
@Entity
public class FuelType {
    @Id
    @Column(nullable = false, length = 50)
    private String fuelType;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fuelType", orphanRemoval = true)
    private List<ProductChargeDetail> productChargeDetailList = new ArrayList<>();


}

计算类型具有

@Data
@Entity
public class CalculationType {
    @Id
    @Column(nullable = false)
    private String calType;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "calculationType", orphanRemoval = true)
    private List<ProductChargeDetail> productChargeDetailList;

}

我有一个问题,当我保存产品时,它抛出这样一个错误。我试着用@ManyToOne(cascade = CascadeType。ALL)到productChargeDetail,但是当我保存一个产品时,它显示一个来自应用程序的错误复制错误。FuelType和CalculationType在表中已经有值。在这种情况下,当我保存它时,applicatoin保存重复错误。

引起:org.hibernate.瞬态实例:对象引用未保存的瞬态实例-刷新前保存瞬态实例:com.misyn.muw.common.entity.ProductChargeDetail.fuel类型-

共有1个答案

凌嘉勋
2023-03-14

如果您引用的实体已经存在,您应该通过EntityManager#get参考创建这些实体的实例,该实例由JpaRepostory#getOne使用。这样,您将收到来自HiberNate的延迟代理,您不需要为此进行任何级联。

 类似资料: