Hibernate - отношения ManyToOne - невозможно найти объект с ошибкой id - PullRequest
0 голосов
/ 01 марта 2020

Ниже приведены классы

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, но проблема все еще сохраняется. Может кто-нибудь, пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...