微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – JPA illegalStateException – CascadeType问题

我希望有人可以为我阐明这一点.我真的不明白这个错误出了什么问题.我有一个实体用于在数据库中创建许多条目.当事务结束并完成同步时,我得到一个illegalStateException.这一切都在从提供所有数据的Web服务填充数据库的过程中.现在,我以一种不会导致任何外键约束错误的方式解析数据,但与实体的关系阻止了我.

Caused by: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: entities.cmic.ajrs.com.Categories[pkId=null].

我试图坚持的实体叫做ProductBase. ProductBase有一个名为pkBrand的外键到Brand_Data表,并带有相应的实体BrandData.

我可以为这些关系将CascadeType设置为ALL,但我真的不想在此时创建该实体.

这是实体(减去一些吸气剂和制定者)

@Entity
@Table(name = "product_base")
@NamedQueries({
    @NamedQuery(name = "ProductBase.findAll",query = "SELECT p FROM ProductBase p"),@NamedQuery(name = "ProductBase.findByPkId",query = "SELECT p FROM ProductBase p WHERE p.pkId = :pkId"),@NamedQuery(name = "ProductBase.findByColorsAvail",query = "SELECT p FROM ProductBase p WHERE p.colorsAvail = :colorsAvail"),@NamedQuery(name = "ProductBase.findBySeriesName",query = "SELECT p FROM ProductBase p WHERE p.seriesName = :seriesName"),@NamedQuery(name = "ProductBase.findByStatusCodes",query = "SELECT p FROM ProductBase p WHERE p.statusCodes = :statusCodes"),@NamedQuery(name = "ProductBase.findByTs",query = "SELECT p FROM ProductBase p WHERE p.ts = :ts")})
public class ProductBase implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "pk_id")
    private Integer pkId;
    @Column(name = "colors_avail")
    private String colorsAvail;
    @Column(name = "series_name")
    private String seriesName;
    @Column(name = "status_codes")
    private String statusCodes;
    @Basic(optional = false)
    @Column(name = "ts")
    @Temporal(TemporalType.TIMESTAMP)
    private Date ts;
    @OnetoMany(mappedBy = "productBase",fetch = FetchType.LAZY)
    private CollectionetoOne(cascade = CascadeType.ALL,mappedBy = "productBase",fetch = FetchType.LAZY)
    private MapTarget mapTarget;
    @OnetoOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    private KeyFeatures keyFeatures;
    @JoinColumn(name = "pk_category",referencedColumnName = "pk_id")
    @ManyToOne(optional = false,fetch = FetchType.LAZY)
    private Categories categories;
    @JoinColumn(name = "pk_brand",fetch = FetchType.LAZY)
    private BrandData brandData;
    @OnetoMany(mappedBy = "productBase",fetch = FetchType.LAZY)
    private CollectionetoMany(mappedBy = "productBase",fetch = FetchType.LAZY)
    private CollectionetoMany(mappedBy = "productBase",fetch = FetchType.LAZY)
    private CollectionetoMany(mappedBy = "productBase",fetch = FetchType.LAZY)
    private CollectionetoMany(cascade = CascadeType.ALL,mappedBy = "brandData",fetch = FetchType.LAZY)
    private Collection
最佳答案
异常清楚地表明ProductBase引用未保存的Categories实例.

如果它是故意的并且您实际上想要保存新的类别实例,则可以为该关系配置级联,或者在保存ProductBase之前手动保存该实例.

否则,如果ProductBase应引用类别的现有持久实例,则需要从数据库加载该实例而不是创建新实例.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐