Hibernate 搜索对两个不同的表进行过滤搜索
Hibernate search do a filter search on two different tables
这是我的问题。
我有两个索引模型 ACL 和资产。这两个表之间没有真正的link,而不是ACL对象的ID与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 但我没能产生好的结果。
具体怎么做?
正如 Hardy 所说,您需要两个实体的组合索引。 Hibernate Search 目前不支持(查询时)索引连接。
查看参考指南中处理 indexing of associated entities 的部分。 @IndexEmbedded
和 ContainedIn
注释可用于此目的。
这是我的问题。
我有两个索引模型 ACL 和资产。这两个表之间没有真正的link,而不是ACL对象的ID与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 但我没能产生好的结果。
具体怎么做?
正如 Hardy 所说,您需要两个实体的组合索引。 Hibernate Search 目前不支持(查询时)索引连接。
查看参考指南中处理 indexing of associated entities 的部分。 @IndexEmbedded
和 ContainedIn
注释可用于此目的。