У меня возникли проблемы с индексированием встроенных текстовых объектов с поиском Hibernate. Поскольку сущности распространяют другие объекты, которые я не могу изменить, использование аннотаций не представляется возможным.Hibernate Индекс поиска встроенная карта
Таким образом, я выполняю сопоставление с использованием программного API. Однако поиск в Hibernate не индексирует встроенные текстовые объекты.
Вот краткий пример того, что модель объекта выглядит (урезанный для простоты):
@Entity
class Article {
@Id
private long uid;
private String articleNumber;
@OneToMany (mappedBy = "article")
@MapKey(name = "languageCode")
private Map<String, ArticleText> texts;
...
}
@Entity
class ArticleText {
@ManyToOne
private ArticleEntity article;
private String languageCode;
private String someText;
...
}
@Entity
class SpecialArticle extends Article {
private String someSpecialAttribute;
}
А вот отрывок отображения:
SearchMapping mapping = ...;
mapping.entity(SpecialArticle.class)
.indexed()
.property("uid", ElementType.FIELD).documentId()
.property("articleNumber", ElementType.FIELD).field()
.property("someSpecialAttribute", ElementType.FIELD).field()
.property("texts", ElementType.FIELD)
.indexEmbedded().targetElement(ArticleText.class).entity(ArticleText.class)
.property("article", ElementType.FIELD).containedIn()
.property("someText", ElementType.FIELD).field();
документации ISN» t совершенно ясно об использовании .indexEmbedded().entity(...)
, но у меня есть еще одна внедренная сущность (ассоциация «много-к-одному»), которая только индексируется с использованием аналогичного сопоставления.
Я подозреваю, что текст не отображается из-за используемой карты, а поиск в спящем режиме не может идентифицировать свойство как карту. Существует MapBrigde
, а также BuildInMapBridge
, но они, похоже, не используются, когда построено сопоставление.
Что я могу потерять или где может быть ошибка?
Btw, я делаю это в среде спящего режима 4.0.1 и Hibernate 4.0.1.