1

我有域对象项,其中包含字段 id、名称、父项和类别(布尔值)。所以我在数据库中插入值,如:

id 名称 parentItem 类别
1 工具 NULL 1
2 电动工具 1 1
3 小工具 2 1
4 实际工具结束子项 3 0

所以实际项目在类别/路径“工具/电动工具/小工具”中

所以我需要通过 categoryName/categoryPath 实现惰性过滤器搜索。例如:如果用户在 dataTable 过滤器“Electric”中输入,我需要返回“Electric tools”类别中的所有项目以及子类别中的所有项目(在本例中为 Small tools 和所有其他如果存在)。

所以目前我在 java 域对象 @Transient 字段中使用递归来获取项目路径。但我不能按瞬态字段搜索。我的意思是我不能在数据库中实现搜索,因为这个字段是:
1.瞬态
2.使用递归,如果我需要在其他 db 版本上部署应用程序,我将不得不在 db 上重写递归 sql 或其他东西。我不喜欢这个

谁能指出我一些聪明、独特的解决方案?任何想法,建议表示赞赏。谢谢!

4

1 回答 1

1

这个问题看起来很相似:HQL recursion, how do this?

简而言之:你不能在 HQL 中进行递归。您最好的选择是:

  • 编写一个本机查询来执行此操作(是的,您必须在每次数据库移动时重写它,因为递归查询不是标准 SQL)
  • 使用连接列在对象中有父/子并遍历和过滤内存中的产品树(使用更多内存,因为您预加载了所有内容,但只命中 DB 一次)
  • 如果您知道您的树不是太深,请进行多次查询。(节省内存,但大量的数据库工作)
于 2014-04-07T16:13:00.543 回答