我有兩個休眠實體Coupon和CouponHistory,CouponHistory和Coupon之間有Uni Directional Relationship。TransientPropertyValueException:對象引用未保存的瞬態實例 - 在查詢沖水前保存瞬態實例
@Entity
@Table(name = "validity_coupon")
public class Coupon {
@Id
@Column(length = 50, unique = true, nullable = false)
private String code;
private int validity;
private boolean used;
...}
@Entity
@Table(name = "coupon_history")
@TableGenerator(name = "seqGen", table = "shunya_id_gen", pkColumnName = "GEN_KEY", valueColumnName = "GEN_VALUE",
pkColumnValue = "coupon_history_seq", allocationSize = 1)
public class CouponHistory {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "seqGen")
private long id;
@Temporal(TemporalType.TIMESTAMP)
private Date createdOn;
@ManyToOne(fetch = FetchType.LAZY)
private Coupon coupon;
...}
有一個交易服務方法,試圖保存單個交易中的兩個實體。 Spring在這裏被用來處理事務。
@Transactional
public void createCoupon() {
Coupon coupon = new Coupon();
coupon.setCode(RandomStringUtils.randomAlphanumeric(5));
coupon.setValidity(1);
couponRepository.save(coupon);
CouponHistory couponHistory = new CouponHistory();
couponHistory.setCreatedOn(new Date());
couponHistory.setCoupon(coupon);
couponHistoryRepository.save(couponHistory);
}
我得到下面的異常,當我把這個方法 -
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance beforeQuery flushing : com.poc.CouponHistory.validityCoupon -> com.poc.Coupon; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance beforeQuery flushing : com.poc.CouponHistory.validityCoupon -> com.poc.Coupon
我不明白爲什麼Hibernate是抱怨我時,我已經在單個事務父實體以前保存的子實體。
如果我將ID生成更改爲自動優惠券實體,然後一切開始正常工作。但我想手動分配優惠券代碼,所以Id自動生成不在範圍內。
任何幫助,將不勝感激!
存儲庫的保存方法是否返回新實例。我在印象中保存對象被分配了一個Id? –
@MunishChandel是它返回連接到持久化上下文的新實例 –