Вот так настроена моя сущность
@Entity
@Indexed
public class Book{
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "book")
@IndexedEmbedded
private FrontPage frontPage;
...//other data
}
@Entity
public class FrontPage{
@OneToOne(cascade = {}, fetch = FetchType.EAGER, targetEntity = Book.class)
@JoinColumn(name = "book_id", nullable = false)
@ContainedIn
private Book book;
...//other data
}
Так выглядит мой интеграционный тест
@Test
public void testMerge_RemoveFrontPage() {
insertDataSet("dataset.xml");
Book book = getEntityManager().find(Book.class, 2000L);
//this book instance already have data
book.setFrontPage(null);
dao.merge(book);
//verify after commit
//In database the FrontPage entity reference is removed
}
При просмотре базы данных сущность FrontPage удаляется, но в Индексе книги все еще я вижу данные FrontPage.
то же самое происходит, если я попытался заменить данные FrontPage, как это, и в индексе Книги теперь я вижу две данные FrontPage.
book.setFrontPage(new FrontPage);
Путем отладки FullTextIndexEventListener регистрирует в журналах ниже предупреждений, не уверен, что это имеет смысл, но у меня есть подозрение, что это может быть причиной.
org.hibernate.search.event.impl. FullTextIndexEventListener: 250 - HSEARCH000024: невозможно переиндексировать сущность при изменении коллекции, невозможно извлечь идентификатор: com.xxxFrontPage
Не уверен, что здесь происходит неправильно или это ожидаемое поведение?
Hibernate Я использую следующие версии:
hibernate-search -asticsearch, hibernate-search-orm = 5.11.4.Final