Java,hibernate瞬态字段

时间:2014-04-07 15:36:06

标签: java hibernate jpa-2.1

我的域对象项目包含字段id,name,parentItem和category(Boolean)。 所以我在数据库中插入值,如:

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

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

所以我需要通过categoryName / categoryPath实现延迟过滤器搜索。 例如:如果用户输入dataTable过滤器" Electric"我需要退回"电动工具"中的所有项目。类别和子类别中的所有项目(在此示例中为小工具,如果存在则为所有其他项目)。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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