java - Hibernate Criteria - 从两个没有任何关联的表中获取结果

标签 java hibernate lucene hibernate-search

我一直在努力使用 Hibernate 标准实现搜索功能。要求有点模糊。用户可以在搜索字段中输入任何文本/单词,搜索必须通过多个彼此之间没有任何关联的表进行。

以下是两个实体类。

Table A (EntityClassA.java)
Table B (EntityClassB.java)

如果用户输入“anycharecter”,则应在这两个表中搜索该字符,并应返回与输入的字符匹配的获取列表。 我还想将表 A 的结果存储到列表,并将表 B 的结果存储到列表

我不确定如何使用 hibernate 标准来实现这一点。

我只能为一张表写这个。

public List<EntityClassAVo> search((string keywords){

List<EntityClassAVo> outputList = new ArrayList<EntityClassVo>();

Criteria criteria = etSessionFactory().getCurrentSession().createCriteria(EntityClassA.class);
//applying restriction - as I need to search entered string in all columns. 
criteria.add(Restrictions.ilike("id", keywords, MatchMode.ANYWHERE));
criteria.add(Restrictions.ilike("name", keywords, MatchMode.ANYWHERE));
criteria.add(Restrictions.ilike("age", keywords, MatchMode.ANYWHERE));
outputList = criteria.list();
return outputList;
}

问题

1)如果可能的话,如何在同一个“搜索”方法中编写 EntityClassB.java 的条件?

2) 如果问题 1 可行,如何将从 EntityClassA 获取的结果存储在一个对象中,将 EntityClassB 获取的结果存储在另一个对象中?

3)如果上述情况不简单,我可能会要求更改设计(只有当我有充分的理由时)。 - 我正在考虑在(表 A)和(表 B)之间放置一个中间表(表 X)。

[已编辑] 4) 有一种情况,用户想要从一个表或两个表中搜索结果。我们如何检查这种情况?

请帮我破解这个问题。

最佳答案

为什么不能简单地为 EntityClassB 编写相同的条件?

Criteria criteriaA = etSessionFactory().getCurrentSession().
            createCriteria(EntityClassA.class);
criteriaA.add(Restrictions.ilike("id", keywords, MatchMode.ANYWHERE));
criteriaA.add(Restrictions.ilike("name", keywords, MatchMode.ANYWHERE));
criteriaA.add(Restrictions.ilike("age", keywords, MatchMode.ANYWHERE));

Criteria criteriaB = etSessionFactory().getCurrentSession().
            createCriteria(EntityClassB.class);
criteriaB.add(Restrictions.ilike("smth", keywords, MatchMode.ANYWHERE));
criteriaB.add(Restrictions.ilike("rows", keywords, MatchMode.ANYWHERE));
criteriaB.add(Restrictions.ilike("here", keywords, MatchMode.ANYWHERE));

然后使用例如Map: Entity -> List返回结果

map.put(EntityClassA.class, criteriaA.list());
map.put(EntityClassB.class, criteriaB.list());
return map;

关于java - Hibernate Criteria - 从两个没有任何关联的表中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383662/

相关文章:

JavaMelody 1.68.0 - JBoss 找不到 iText 类

java web 应用程序及其托管服务器

java - org.codehaus.jackson.map.JsonMappingException : Infinite recursion (StackOverflowError)

java - 使用 Hibernate 保留用户

使用 Lucene/solr/mahout 进行文本推荐

lucene - Solr 索引似乎有效 - 但没有返回任何结果

java - 在java中使用相同的writeToFile写入不同的数组列表

java - 确定类来自哪个 JAR 文件

java - @SQLResultSetMapping 未找到列问题

java - 如何保留Lucene索引而不删除文档