cuốn sách gpt4 ai đã làm

java - ngoại lệ giá trị thuộc tính tạm thời: đối tượng tham chiếu một phiên bản tạm thời chưa được lưu - lưu phiên bản tạm thời trước khi xóa truy vấn

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 19:10:40 36 4
mua khóa gpt4 Nike

Tôi có hai thực thể ngủ đông Coupon và CouponHistory, với mối quan hệ một chiều giữa CouponHistory và Coupon.

@Entity
@Table(name = "validity_coupon")
phiếu giảm giá hạng công khai {

@Id
@Column(độ dài = 50, duy nhất = true, nullable = false)
mã chuỗi riêng tư;

giá trị int riêng tư;
boolean riêng được sử dụng;

...}


@Entity
@Table(name = "coupon_history")
@TableGenerator(name = "seqGen", table = "shunya_id_gen", pkColumnName = "GEN_KEY", valueColumnName = "GEN_VALUE",
pkColumnValue = "coupon_history_seq", phân bổSize = 1)
lớp công khai CouponHistory {

@Id
@GeneratedValue(strategy = GenerationType.TABLE, trình tạo = "seqGen")
id dài riêng tư;

@Temporal(TemporalType.TIMESTAMP)
riêng tư Ngày tạoNgày;

@ManyToOne(tìm nạp = FetchType.LAZY)
phiếu giảm giá riêng;

...}

Có một phương thức dịch vụ giao dịch cố gắng lưu hai thực thể trong một giao dịch. Spring được sử dụng ở đây để xử lý các giao dịch.

@Giao dịch
khoảng trống công khai createCoupon() {
Phiếu giảm giá phiếu giảm giá = Phiếu giảm giá mới();
coupon.setCode(RandomStringUtils.randomAlphanumeric(5));
phiếu giảm giá.setValids(1);
couponRepository.save(phiếu giảm giá);

CouponHistory couponHistory = new CouponHistory();
couponHistory.setCreatedOn(new Date());
couponHistory.setCoupon(phiếu giảm giá);
phiếuHistoryRepository.save(couponHistory);
}

Khi tôi gọi phương thức này, tôi nhận được ngoại lệ sau -

org.hibernate.TransientPropertyValueException: đối tượng tham chiếu một phiên bản tạm thời chưa được lưu - lưu phiên bản tạm thời trước khi xóa truy vấn: com.poc.CouponHistory.validityCoupon -> com.poc.Coupon ngoại lệ lồng nhau là java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: đối tượng tham chiếu một phiên bản tạm thời chưa được lưu - lưu phiên bản tạm thời beforeQuery xả nước: com.poc.CouponHistory.validityCoupon -> com.poc.Coupon

Tôi không hiểu tại sao chế độ ngủ đông lại nhắc tôi khi tôi lưu thực thể con trước rồi đến thực thể mẹ trong một giao dịch.

Nếu tôi thay đổi việc tạo ID của thực thể phiếu giảm giá thành tự động thì mọi thứ sẽ bắt đầu hoạt động tốt. Nhưng tôi muốn gán mã phiếu giảm giá theo cách thủ công nên tính năng tự động tạo Id không nằm trong phạm vi.

如有任何帮助,我们将不胜感激!

câu trả lời hay nhất

Vì bạn không xếp tầng các phiếu giảm giá nên bạn cần quản lý CouponHistory trước khi lưu nó, may mắn là save() sẽ trả về một thực thể bền vững được quản lý khi bạn lưu thực thể đó để bạn có thể chỉ định nó cho phiếu giảm giá

 @Giao dịch
khoảng trống công khai createCoupon() {
Phiếu giảm giá phiếu giảm giá = Phiếu giảm giá mới();
coupon.setCode(RandomStringUtils.randomAlphanumeric(5));
phiếu giảm giá.setValids(1);
phiếu giảm giá = couponRepository.save(coupon);//save sẽ trả về thực thể được quản lý

CouponHistory couponHistory = new CouponHistory();
couponHistory.setCreatedOn(new Date());
couponHistory.setCoupon(phiếu giảm giá);
phiếuHistoryRepository.save(couponHistory);
}

Về java - ngoại lệ giá trị thuộc tính tạm thời: đối tượng tham chiếu một phiên bản tạm thời chưa được lưu - lưu phiên bản tạm thời trước khi xóa truy vấn, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/45778937/

36 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress