Hibernate Search добавить только DocumentId из класса IndexedEmbedded - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть «Счет-фактура» субъекта, и у этого отношения много-к-одному отношение «Клиент-сущность». Этот объект-клиент также используется в других объектах для поиска в режиме гибернации, поэтому существует множество аннотаций поиска в режиме гибернации. Для Инвойса HS-Index я просто хочу, чтобы Customer.id был в инвойсе, а не какое-либо другое свойство Клиента. Как это возможно, потому что в документации я не нашел ничего конкретного c об этом.

1 Ответ

1 голос
/ 28 апреля 2020

В последних версиях Hibernate Search вы просто используете @IndexedEmbedded(includePaths = "id").

Hibernate Search 3.4, однако, очень старый (9 лет), и в нем отсутствуют многие функции. Я бы порекомендовал вам обновить, поскольку вы, скорее всего, столкнетесь с ошибками, которые никогда не будут устранены в этой версии.

Если вам действительно нужно придерживаться версии 3.4, я думаю, что вашим единственным решением будет написание собственного моста. :

public class CustomerIdBridge implements StringBridge {

    public String objectToString(Object object) {
        Customer customer = (Customer) object;
        if ( customer == null ) {
           return null;
        }
        Object id = customer.getId();
        return id == null ? null : id.toString();
    }
}

Затем примените мост следующим образом:

@ManyToOne(...)
@Field(bridge = @FieldBridge(impl = CustomerIdBridge.class))
private Customer customer;                

Полученное поле будет просто названо «customer» (то же имя, что и ваша собственность).

См. здесь для получения дополнительной информации о мостах в Hibernate Search 3.4.2.

...