Hibernate Поиск и отношения - PullRequest
       8

Hibernate Поиск и отношения

4 голосов
/ 19 декабря 2010

У меня есть объект с именем 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, чтобы правильно проиндексировать значения ключевых слов?

1 Ответ

6 голосов
/ 20 декабря 2010

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

- Hardy

...