Спящий поиск и отношения

У меня есть объект с именем MyItemBean, который может иметь 0 или более связанных объектов KeywordBean. В результате классы выглядят следующим образом:

@Entity
public class MyItemBean {

   ...stuff...

   @ManyToMany(targetEntity = KeywordBean.class, cascade = CascadeType.PERSIST)
   @JoinTable(name = "tbl_item_keyword", joinColumns = @JoinColumn(name = "item_id"), inverseJoinColumns = @JoinColumn(name = "keyword_id"))
   private List<KeywordBean> keywords = null;

   ...more stuff...
}

@Entity
public class KeywordBean {

   ...stuff...

   private String value=null;

   ...more stuff...
}

Я использую JBoss Seam/Hibernate Search для индексации этих объектов, чтобы выполнять к ним поисковые запросы. Я хотел бы иметь возможность искать MyItemBean экземпляров с заданным значением ключевого слова. Однако это отношение является однонаправленным, поскольку я применяю KeywordBean объектов не только к MyItemBean. Я просмотрел в документации Hibernate Search примеры того, как индексировать отношения, но все примеры, которые они предоставляют, являются двунаправленными. Может ли кто-нибудь сказать мне, какие аннотации мне нужно применить к MyItemBean.keywords, чтобы правильно индексировать значения ключевых слов?


person Shadowman    schedule 19.12.2010    source источник
comment
Ваш *Bean не является бобом. Это скорее объект-значение (*VO).   -  person alexander    schedule 11.03.2015


Ответы (1)


Следует использовать аннотацию IndexedEmbedded. Он также отлично работает с однонаправленными ассоциациями. Проблема может возникнуть, если вы изменяете значение KeywordBean. Hibernate Search не имеет способа обновить индекс для экземпляров MyItemBean, которые ссылаются на измененный KeywordBean< /эм>. В двунаправленных отношениях вы можете использовать @ContainedIn для решения этой проблемы, но на самом деле вам это не нужно. При условии, что в вашем случае это ограничение обновления индекса может не быть проблемой. Возможно, ваш KeywordBean не меняется. Или, если он изменится, вы можете переиндексировать все *KeywordBean*, которые затронуты вручную.

--Харди

person Hardy    schedule 20.12.2010
comment
Так куда же ведет аннотация @IndexEmbedded? Будет ли он работать с KeywordBean на уровне класса? Или MyItemBean на уровне свойств для ключевых слов? - person Shadowman; 22.12.2010
comment
Он принадлежит свойству ключевого слова в MyItemBean. - person Hardy; 30.12.2010