Ниже приведены классы
AbstractReview. java
@Entity
@Table(name="REVIEW")
@Inheritance(strategy= InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="REVIEW_TYPE")
@Audited
public class AbstractReview{
@Id
@GeneratedValue(generator="reviewGenerator", strategy=GenerationType.SEQUENCE)
@SequenceGenerator(name="reviewGenerator",sequenceName="REVIEW_ID_SEQ", allocationSize = 1)
@Column(name="REVIEW_ID")
Long reviewId;
@OneToMany(mappedBy="review", fetch = FethcType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, tragetEntity = ReviewApproval.class)
private Set<ReviewApproval> = new HashSet<>();
}
ApprovalDetails. java
@Entity
@Table(name="APPROVAL_DETAIL")
@Audited
@Inheritance(strategy= InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="APPROVAL_TYPE", discriminatorType= DiscriminatorType.STRING)
@DiscriminatorOptions(force=true)
public class ApprovalDetails{
@Id
@GeneratedValue(generator="approvalDetailIdGenerator", strategy=GenerationType.SEQUENCE)
@SequenceGenerator(name="approvalDetailIdGenerator",sequenceName="APPROVAL_DETAIL_ID_SEQ", allocationSize = 1)
@Column(name="APPROVAL_DETAIL_ID")
Long approvalDetailId;
@OneToOne(cascade = CascadeType.REFRESH)
@JoinColumn(name = "APPROVER_CONTACT_ID", referencedColumnName = "CONTACT_ID", nullable = false)
Contact contact;
}
ReviewApproval. java
@Entity
@Audited
@DiscriminatorValue("REVIEW")
public class ReviewApproval extends ApprovalDetails{
@ManyToOne(fetch=FetchType.Lazy)
@JoinColumn(name="REVIEW_ID", referencedColumnName="REVIEW_ID")
AbstractReview review
}
Структура БД:
Таблица - APPROVAL_DETAIL
APPROVAL_DETAIL_ID - PK
MEMO_ID - FK
REVIEW_ID - FK
Таблица - Контакт
CONTACT_ID - PK
MEMO_ID - FK
Таблица - ОБЗОР
REVIEW_ID - PK
Сведения о выпуске:
При добавлении нового контакта соответствующий объект утверждения проверки устанавливается в объекте обзора, и нижняя строка работает нормально. Если для Contacts reviewApprovalInd задано значение true, соответствующая запись создается в ReviewApproval. Если reviewApprovalInd изменяется с true на false, соответствующая запись удаляется из ReviewApproval. Оба случая работают нормально с кодом ниже.
reviewService.update(review); <- which uses entityManager.merge
, но приведенный выше код создает проблему, если для какого-либо существующего контакта обзорApprovalInd изменяется с Нет на Да, тогда он выдает EntityNotFoundException : Unble to find ReviewApproval with id : 62001
Код, связывающий утверждение с обзором:
if(contact.ApprovalInd){
ReviewApproval app = new ReviewApproval();
app.setContact(contact);
app.setReview(this);
this.getReviewApproval().add(app);
}
Я попытался добавить @Ignore
к аннотации @ ManyToOne
, но проблема все еще сохраняется. Может кто-нибудь, пожалуйста, помогите.