0
我有以下問題。我有一個AppointmentRequest類,它是看起來像這樣的實體:JPA同步驗證持續之前
public class AppointmentRequest implements Serializable{
private static final long serialVersionUID = 4075310313280246558L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_Sequence")
@SequenceGenerator(name = "id_Sequence", sequenceName = "ID_SEQ")
@Column(name = "APPOINTMENT_REQUEST_ID", nullable = false)
private long requestId;
@Version
private long version;
@Column(nullable=false)
private String firstName;
@Column(nullable=false)
private String lastName;
@Column(nullable = false)
private long jmbg;
@OneToOne
private TimeSlot timeSlot;
時隙實體:
public class TimeSlot {
@Id
@Column(columnDefinition="TIMESTAMP(0)",nullable=false)
private LocalDateTime dateTime;
@OneToOne(mappedBy="timeSlot")
private AppointmentRequest appointmentRequest;
這裏是EJB代碼驗證和持續appointmentRequest:
validator.slotAvailable(appointmentRequest.getTimeSlot());
entityManager.persist(appointmentRequest);
Validator EJB檢查時隙是否可用,以及是否應該保留appointmentRequest,但如果不是,則會引發異常。請求和響應通過SOAP Web服務進行,所以如果成功則服務返回true,如果該插槽已被預訂,則返回false。
當我逐個發送SOAP請求時,它一切正常。
但是,我製作了一個SOAP客戶端,它可以製作多個線程(模擬多個客戶端),並同時發送同一時間段的多個請求。在這種情況下,多個約會請求會被保存在一個時隙中。 發生這種情況是因爲驗證異步發生,並且多個線程同時通過驗證,所以多個實體持續存在,這不應該發生。
我該如何解決這個問題?通過將驗證添加到@Prepersist回調中,我獲得了更好的性能,但仍有時會將多個約會請求保存在相同的時隙中。