0

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

以下是两个实体类。

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

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

我不确定如何使用休眠标准来实现。

我只能为一张桌子写这个。

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)有一种情况,用户想要从一个表中的一个或两个表中搜索结果。我们将如何检查这种情况?

请帮我破解这个东西。

4

1 回答 1

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 -> List 来返回结果

map.put(EntityClassA.class, criteriaA.list());
map.put(EntityClassB.class, criteriaB.list());
return map;
于 2013-05-05T13:21:12.580 回答