gpt4 book ai didi

java - 按 id 加载实体时 Hibernate enableFilter 不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:08 26 4
gpt4 key购买 nike

我有 3 个类:

  • 事件
  • PublicEvent extends Event
  • PersonalEvent extends Event

我的 hibernate 映射文件类似于下面的内容。我想为 PersonalEvent 添加一个过滤器,在加载这个对象之前,我启用了过滤器。但这不起作用。我的 hibernate 版本是 4.3.11.Final

事件.hbm.xml

<hibernate-mapping>
<class name="org.calendar.Event">
...
<filter name="personalEventAuthorize" condition="person_ID = :personId" />
</class>
<joined-subclass name="org.calendar.PersonalEvent" extends="org.calendar.Event">
<key column="id" property-ref="id" />
...
<many-to-one name="person" column="person_ID" entity-name="org.person.Person" />
</joined-subclass>
<joined-subclass name="org.calendar.PublicEvent" extends="org.calendar.Event">
<key column="id" property-ref="id" />
...
</joined-subclass>
<filter-def name="personEventAuthorize">
<filter-param name="personId" type="integer" />
</filter-def>
</hibernate-mapping>

个人事件存储库

@Override
public PersonalEvent load(Long id) {
Filter filter = getSession().enableFilter("personEventAuthorize");
filter.setParameter("personId", getAuthenticatedPersonId());
return super.loadById(id);
}

hibernate 生成的 SQL 查询没有我的过滤器。我的问题是什么?为什么 hibernate 不能为加入子类启用过滤器?感谢所有...

最佳答案

This is not a bug, it's the intended behavior .我更新了 Hibernate 用户指南以使其更加明显。

当您直接加载实体时,@Filter 不适用:

Account account1 = entityManager.find( Account.class, 1L );
Account account2 = entityManager.find( Account.class, 2L );

assertNotNull( account1 );
assertNotNull( account2 );

如果您使用实体查询(JPQL、HQL、Criteria API),它适用:

Account account1 = entityManager.createQuery(
"select a from Account a where a.id = :id",
Account.class)
.setParameter( "id", 1L )
.getSingleResult();
assertNotNull( account1 );
try {
Account account2 = entityManager.createQuery(
"select a from Account a where a.id = :id",
Account.class)
.setParameter( "id", 2L )
.getSingleResult();
}
catch (NoResultException expected) {
expected.fillInStackTrace();
}

因此,作为解决方法,使用实体查询(JPQL、HQL、Criteria API)来加载实体。

关于java - 按 id 加载实体时 Hibernate enableFilter 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42173894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com