2015-04-27 3 views
0

Я пытаюсь использовать Hibernate Search на двух объектах, которые не имеют (и не должны) разделять отношение на уровне объекта, однако они связаны таблицей соединений, которая использует их идентификаторы. (Наследство)Индекс Объекты без прямого отношения в спящем режиме Поиск

Это более или менее двух лиц:

@Entity 
@Indexed 
class Person { 
    @Id 
    private long id; 

    @Field 
    private String name; 
    .... 
} 

@Entity 
@Indexed 
class Address { 
    @Id 
    private long id; 

    @Field 
    private String street; 

    @Field 
    private String zip; 
    .... 
} 

Они соединены своими идентификаторами:

@Entity 
class Relation { 
    @Id 
    private long id; 

    private long personId; 
    private long addressId; 
} 

поставленной цели я пытаюсь добиться в поиске подобных лиц, которые поделитесь аналогичным адресом через Hibernate Search. Это означает, что я ищу атрибуты от Person и Address.

Я думаю, что самый простой способ - «эмулировать» отношение @IndexedEmbedded, что означает денормализацию данных и добавление «улицы» и «zip» из документа «Адрес в лицо». Я наткнулся на Hibernate Search Programmatic API, но я не уверен, что это правильный путь (и как туда поступить). Будет ли это правильным способом делать что-либо или я чего-то не хватает?

ответ

0

Если вы не можете добавить это отношение в модель, вам будет очень не повезло. Вы правы, что вам нужно будет индексировать Person и соответствующие данные Address в тот же документ (это то, что действительно делает @IndexedEmbedded). Обычный/лучший способ настройки Document осуществляется через пользовательский (класс) мост. Однако проблема в вашем случае заключается в том, что вам понадобится доступ к текущему Hibernate Session в рамках реализации настраиваемого моста.

Если вы не используете какой-то подход, при котором это Session, например привязанный к ThreadLocal, не будет способ для вас, чтобы загрузить соответствующие Address данные для данного Person в рамках реализации моста.