我一直在努力使用Hibernate标准实现Search功能。要求有点模糊。用户可以在搜索字段中输入任何文本/单词,搜索必须通过多个表格进行,这些表格之间没有任何关联。
以下是两个实体类。
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)。
[EDITED] 4)有一种情况,用户想要从1个表中的任何一个或两个中搜索结果。我们将如何检查这种情况?
请帮我解决这个问题。
答案 0 :(得分:1)
为什么不能简单地为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 - &gt;列表返回结果
map.put(EntityClassA.class, criteriaA.list());
map.put(EntityClassB.class, criteriaB.list());
return map;