Я сталкиваюсь с javax.persistence.persistenceException: Невозможно найти ошибку дескриптора сущности в приложении Spring Boot, используя JPA и QueryDsl. < /p>
Проблема возникает, когда я пытаюсь удалить и удалить @Onetoone, связанный с объектом (infustEntynity). Вот упрощенная версия моего кода: < /p>
@Transactional
public void deleteCertificatesFromEnvelope(Envelope envelope) {
if ((envelope.status == EnvelopeStatus.COMPLETED || envelope.status == EnvelopeStatus.CANCELED)
&& Objects.nonNull(envelope.envelopeSigner) && !envelope.envelopeSigner.isEmpty()) {
Predicate existsCertificate =
signer -> Objects.nonNull(signer.envelopeSignerCertificate);
Supplier supplierSigners = () ->
envelope.envelopeSigner.stream().filter(existsCertificate);
removeCertificateFromSigner(supplierSigners.get());
removeCertificates(supplierSigners.get());
}
}
private void removeCertificateFromSigner(Stream existsCertificate) {
List signers = existsCertificate
.map(signer -> signer.id)
.collect(Collectors.toList());
signerCustomRepository.deleteAllSignerCertificate(signers);
}
private void removeCertificates(Stream existsCertificate) {
List certificates = existsCertificate
.map(signer -> signer.envelopeSignerCertificate.id)
.collect(Collectors.toList());
for (UUID certificate : certificates){
certificateRepository.deleteById(certificate);
}
}
< /code>
Метод DeleTealLSignerCertificate использует QueryDSL для установки иностранного ключа на NULL: < /p>
public void deleteAllSignerCertificate(List signers) {
QEnvelopeSignerEntity entity = QEnvelopeSignerEntity.envelopeSignerEntity;
new JPAUpdateClause(entityManager, entity)
.setNull(entity.envelopeSignerCertificate)
.where(entity.id.in(signers))
.execute();
}
< /code>
и отношения определяются как: < /p>
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "envelope_signer_certificate")
private EnvelopeSignerCertificateEntity envelopeSignerCertificate;
< /code>
Я считаю, что проблема может быть вызвана использованием jpaupdateclause (от querydsl) для установки поля иностранного ключа (envelope_signer_certificate) в NULL, что нарушает отношения в базе данных без обновления контекста Hibernate. Все еще думает, что отношения не повреждены или пытаются разрешить метаданные объекта, которые больше не соответствуют состоянию в базе данных - отсюда «Невозможно найти дескриптор сущности». < /p>
Я пробовал: < /p>
. Включено в сущность Scan (@entityScan).
trable entitymanager.clear () после JPaupdateclaus>
Подробнее здесь: https://stackoverflow.com/questions/796 ... g-onetoone
Spring Boot / JPA: «Невозможно найти дескриптор объекта» после установки взаимосвязи @onetoone в NULL с QueryDsl ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение