在使用Hibernate的非持久性集合的内存过滤中

时间:2009-06-10 20:47:31

标签: hibernate filter

确定。我想要的是:   使用Hibernate,可以加载一次MyEntity对象列表,并将该列表作为jtable模型的内部数据。我也有一个jTextField,当键入一个键时,我调用我的模型的方法,该方法将jtextfield的文本作为参数并过滤MyEntity的内部列表并触发tablemodel change事件。我希望每次都能在没有访问数据库的情况下进行过滤。

我做的是: 我在模型中保留了两个列表:一个名为initialList,只有一次加载了createCriteria(...)。list(),另一个名为filteredList,每当调用刷新方法时,它都填充如下:

public void refresh(String filterText)
{
   filteredList = session.createFilter(initialList, "where property= ?")
     .setParameter( 0, filterText)
    .list();
}

然后我使用此筛选列表为jtable提供行,列值。 好吧,它没有用,因为Hibernate说过滤器API的东西只能在持久集合中使用。所以我有以下3个问题:

  1. Essentialy如果我创建一个虚拟父实体(以及数据库中的虚拟父表),它将包含所有MyEntity行作为子集合并加载此父虚拟实体,这将有效吗?如果是的话,这样做听起来很愚蠢,只是为了让hibernate认为集合是持久的,让我使用过滤器的东西。我错过了什么?
  2. 假设我确实有一个持久集合并使用过滤器API,这是否保证除了初始加载之外我永远不会打到数据库?我不在乎更新,只需加载一次,然后快速过滤,因为我需要在每次用户按键时进行过滤。
  3. 有没有其他方法可以获得此功能。我想我可以手动使用Java Collections API对过滤器索引和内容进行排序,但是还有其他任何现成的方法吗?
  4. 提前致谢。

1 个答案:

答案 0 :(得分:1)

不确定#1但它可能有用......

我建议您查看commons-collection(CollectionsUtils)并根据需要在内存中进行过滤

另外,根据您所做的查询,如果配置正确,二级缓存实际上可能会阻止对数据库的访问。