Мне нужна помощь в разрешении спящего режима TransientPropertyValueException
У нас есть две сущности:
@Entity
@Table(name = "TABLE_A")
public class TableA {
@Id
@Column(name = "EXT_ID", nullable = false, unique = true, updatable = false)
private String extId;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "EXT_ID", updatable = false, insertable = false)
private TableB tableB;
(...)
}
@Entity
@Table(name = "TABLE_B")
public class TableB {
@Id
@Column(name = "EXT_ID", nullable = false)
private String extId;
@OneToOne
@JoinColumn(name = "EXT_ID")
private TableA tableA;
}
Теперь мы удаляем TableA
, используя CrudRepository
:
@Override
@Transactional
public boolean cancel(String extId) {
Optional<TableA> maybeTableA = repository.findTableA(extId, DELETE_STATUS_SET);
return maybeTableA.map(tableA -> {
repository.delete(tableA);
return true;
}).orElse(false);
}
Пока все отлично работает.Но теперь, когда я хочу запросить TableB
, который имел ссылку на TableA
, я получаю TransientPropertyValueException
Очевидно, что ссылка от TableB
до TableA
не была удалена до совершениятранзакция.
Есть хороший способ решить эту проблему?Я пытался sessionFactory.getCurrentSession().flush()
непосредственно после удаления, но он также не работает
Единственная альтернатива, которая сработала, - это ручное удаление ссылки в транзакции:
tableB.setTableA(null);
tableBRepository.save(tableB);
Но это немногонемного хаки IMO