我现在有点困惑。我有三张table:特价、合作伙伴、产品。
在“特殊价格”中,我可以存储为选定合作伙伴提供的产品折扣。所以它只有三列。partner和product表以及它们的行从specialprice表中引用。
这三个表在我的java应用程序中也表示为实体。这里是我的问题:如果我想存储一个特殊的价格,我得到以下例外:
Caused by: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: 0.
错误信息很有用,我必须使用cascadetype,好吗。但是如果我使用cascadetype.all特殊价格将被创建(因此不再有java.lang.illegalstateexception),但是在产品和合作伙伴表中,所选的合作伙伴和产品将被复制。。。我不明白这怎么可能?
特殊价格实体:
@Basic(optional = false)
@NotNull
@Column(name = "DISCOUNT_RATE")
private int discountRate;
@JsonBackReference
@JoinColumn(name = "PRODUCT_ID", referencedColumnName = "ID")
@ManyToOne(optional = false)
private Product productId;
@JsonBackReference
@JoinColumn(name = "PARTNER_ID", referencedColumnName = "ID")
@ManyToOne(optional = false)
private Partner partnerId;
来自合作伙伴实体的参考:
@JsonIgnore
@OneToMany(mappedBy = "partnerId")
private Collection<SpecialPrice> specialPriceCollection;
(与产品相同)
使用eclipselink(jpa 2.1)
谁能帮帮我,我做错什么了?我不想复制选定的合作伙伴和产品。。。
谢谢您!
1条答案
按热度按时间bakd9h0s1#
我理解
Partner
以及Product
两个都是预先存在的实体?在这种情况下,请在服务方法中尝试以下代码:
作为旁注,使用
CascadeType.ALL
与@ManyToOne
几乎从来都不是个好主意。