当前位置: 首页 > 知识库问答 >
问题:

基本实体上的Hibernate Manytone筛选器

庄萧迟
2023-03-14

我有一个实体“事件”,它与实体“组织”有ManyToOne关系。所以一个组织可以有多个事件。

我最初想做的是使用组织实体的属性过滤实体事件。所以基本上,当我获取事件时,只返回具有Organization.code=: codeParam的事件。

为了实现这一点,我实现了一个hibernate过滤器:

@FilterDef(name="codeFilter", parameters=@ParamDef( name="codeParam", type="string" ) )

...

@ManyToOne
@JoinColumn(name="Organization_Id")
@Filter(name="codeFilter", condition=" code = :codeParam")
private Organization organization;

...

Filter hibernateFilter = sess.enableFilter("codeFilter");
hibernateFilter.setParameter("codeParam", "hola");

不幸的是,根据Hibernate团队在Hibernate论坛上的帖子,这是不可能的:

Hibernate数据筛选器不会更改关联的多重性。因此,根据定义,它不会过滤多对一、一对一或任何load()或get()操作。

它应该做什么,返回NULL而不是实例?NULL不意味着FILTERED,它意味着NULL。你们使用过滤器错了。

所以我的问题是:有没有任何方法可以从多通关系(Organization.code=:codeParam)中过滤对实体有条件的基本实体(“事件”)?

我需要在每次获取事件时都执行这一点,因此使用现有的hibernate过滤器或类似的解决方案将不胜感激。

编辑1:这个问题是一个简单的例子,说明需要在更大的规模上做些什么。基本上,我们希望通过在我们所有表都有的Unix权限行上使用全局定义的过滤器来增加我们所有实体及其嵌套实体的安全性。

共有1个答案

易宏阔
2023-03-14

警告:不要这样做,它依赖于Hibernate的内部结构,容易因模式更改而中断,可能还取决于单个查询设置的变化。

设置HiberNate以显示其生成的sql,运行您想要筛选的查询(在本例中,加载一些事件对象),并检查它为用于获取相关组织的联接分配了什么名称。例如,生成的sql可能包括this_上的内连接组织某些名称。Organization_Id=某些名称。组织ID。然后将筛选器应用于事件类,而不是关联,条件是“某些名称ere.code=: codeParam”

不幸的是,这是我能找到的通过关联类的属性过滤一个类的唯一方法

我正在尝试制作一个更健壮的解决方案,但这是一个复杂的问题,我仍处于研究阶段。我预计它将在启动时使用代码生成(通过注释处理器)和对HiberNate映射信息的编程修改,但我还不确定还有什么。

 类似资料:
  • 我正在尝试在我的Spring数据服务中使用查询DSL来实现类似于SQL的查询 成员可以是项目或黑客马拉松的成员。项目是黑客马拉松的一部分。我试图找到哈查顿和子项目的所有成员。 因为谓词产生了交叉连接,所以QueryDslPredicateExecutor接口对我不起作用: 我尝试过使用JPAQuery来手动管理连接策略,但是也遇到了同样的问题: Hibernate:选择memberenti0_.i

  • 我正试图找出如何解决这两个问题,我有我的ES 5.6索引。 我需要创建两个单独的脚本过滤器: 1-筛选employee数组大小==3的文档 2-筛选数组第一个元素为“name”==“John”的文档 我试图做一些第一步,但我无法迭代列表。我总是有一个空指针异常错误。

  • 我想知道如何使用JPA标准API通过相关实体的外键过滤实体。 假设我有两个实体如下: 我想查询ID(1,2,3)部门下的员工。

  • 我有一个实体,其中一个字段是 我需要得到所有的时间表项目,其中的集合包含一个特定的组(集合可以有很多不同的组也。如果“我的组”是其中之一-它是我需要的)。 如果在没有任何条件的情况下运行代码,我可以在调试器中看到我的包含数据库中的所有项,并且每个项都包含中的组。 截图 当然,我可以“手动”找到我需要的项(例如,使用.stream()),但我肯定有一些方法可以使用谓词来获得它。

  • 本文向大家介绍基于jQuery选择器之表单对象属性筛选选择器的实例,包括了基于jQuery选择器之表单对象属性筛选选择器的实例的使用技巧和注意事项,需要的朋友参考一下 注意: 在某些浏览器中,选择器:checked可能会错误选取到<option>元素,所以保险起见换用选择器input:checked,确保只会选取<input>元素 以上这篇jQuery选择器之表单对象属性筛选选择器实例就是小编分享

  • 关于searchview,我有一个简单的问题--我在我的菜单中创建了searchview项,我有功能gridview,但我不知道如何在onCreateOptionMenu中完成我的代码--它不会识别我的GridAdapter。以下代码 gridAdapter是我的gridview的适配器,但它显示为红色,这是我不明白的。顺便说一句:即使在OnCreateOptionsMenu中添加了这两行,应用程