这是问题所在:
我收到一个项目的任务 使用Spring,Hibernate和Wicket。
在特定的HTML页面中,我必须有可能创建一个 filter(设置过滤器的名称和 它的参数)。我必须创建一个列表 以这种方式过滤在相同的 时间,我必须有可能 编辑和删除过滤器,以及 当然,要使用那个过滤器。
有什么想法吗?我怎么能这样做?
我对Hibernate的体验非常低,但我需要为项目提供一个想法。
我有类Table_Something,我已将数据库中的表与Hibernate相关联,我需要为用户创建在我的Web应用程序中为此表创建过滤器的可能性
所以,我会创建一个名为Table_Something_Filters的类,我将把我的数据库中的表与Hibernate关联起来。所以当我在我的应用程序中为Table_Something创建一个新的过滤器时,我会在Table_Something_Filters中插入一个新行。
这是个好主意吗?我的解决方案有什么改进吗?
另一个问题:我如何使用我的过滤器?我查询Table_Something_Filters来获取过滤器参数的值然后是什么?如何根据Table_Something_Filters中的值生成查找程序,或者如何查询Table_Something?
欢迎任何想法或建议! :)
答案 0 :(得分:0)
嗯,是的,您可以在* _FILTER表中保存用户输入的参数和值作为过滤器,然后在DAO中有这样的方法:
public List<MyEntity> findByFilter(MyEntityFilter filter) {
//Use hibernate criteria api to build up your query depending on value in your filter
Criteria criteria = session.createCriteria(MyEntity.class)
if (filter.getName() != null) {
criteria.add( Restrictions.like("name", filter.getName())
}
... Go on testing and adding other parts of the query
return criteria.list();
MyEntityFilter类将是一个简单的类,其中包含可能的搜索过滤器的每个参数的getter和setter。您将使用存储在数据库中的值构建此Filter类。如果过滤器不经常更改,您可以将它们缓存在应用程序中。如果你只有几个可过滤的参数,你可以将它们存储在不同的列中,否则你宁愿存储一个这样的字符串: name = John ; color = blue,red,yellow; parameter3 = value * and然后解析字符串以填充Filter对象。小心你使用的分隔符字符,你应该从用户输入中删除它们!
然后,您可以仅使用Filter类的填充字段动态构建搜索条件。
如果您使用带休眠的spring,请查看他们的HibernateDaoSupport,您还可以搜索通常用于此复杂查询构建的规范模式。
当然你不必使用标准api,你也可以建立一个HQL查询字符串,但是标准api更适合这种东西(不总是更容易阅读)。