2015-11-03 3 views
0

вот моя проблема.Hibernate поиск делает поиск фильтра на двух разных таблицах

У меня есть две индексированные модели ACL и Asset. Между этими двумя таблицами нет реальной связи, а идентификатор объекта ACL не совпадает с объектом Asset.

С HQL, у меня есть этот запрос, как работает отлично:

String[] permissions 
Query query = session.createQuery("From Asset as asset, " 
+ "Acl as acl " 
+ "where asset.id = :id and asset.id = acl.object.id " 
+ AclService.buildQuery (permissions) 
+ "and acl.group in (:groups) "); 
query.setParameter("id", assetId); 
query.setParameterList("groups", user.getGroup().getGroups().values()); 


public static String buildQuery(String[] perms) { 
    StringBuilder buf = new StringBuilder(); 
    for (int i=0; i<perms.length; i++) { 
     buf.append("and "); 
     buf.append(perms[i]); 
     buf.append(" = true "); 

    } 
    return buf.toString(); 
} 

Я хочу сделать такой же запрос к базе данных, но и с помощью Hibernate Search. Как я могу это сделать. Я уже смотрел это http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#query-filter, но я не смог добиться хороших результатов.

Как я могу это сделать точно?

+0

Как вы индексируете ACL и Asset? Что вы пробовали? Скорее всего, вам нужно будет индексировать оба класса в один и тот же индекс. – Hardy

ответ

0

Как говорит Харди, вам нужен комбинированный индекс двух объектов. Hibernate Search не поддерживает соединение (время запроса), соединяющееся в этот момент.

Ознакомьтесь с разделом, касающимся indexing of associated entities, в справочном руководстве. Для этого могут использоваться аннотации @IndexEmbedded и ContainedIn.

+0

После использования @indexEmbedded, могу ли я использовать фильтр, чтобы сохранить только некоторые объекты? – N3M0QC

+0

Да, хотя основным средством выбора результатов было бы предикаты в [запросе] (http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#section-building-lucene -queries). – Gunnar