21

我有一个实体,它与另一个用@Where 注释的实体有关联,就像这样

public class EntityA {

    @OneToMany
    @Where(...)
    private List<EntityB> entityBList;

}

最近不可避免的事情发生了,我需要加载不符合@Where 子句的EntityB。我可以删除 @Where 注释,但它被大量使用,所以理想情况下我不想这样做。除了手动加载 EntityB 的列表之外,还有另一个查询,我有什么选择?我可以告诉 Hibernate 忽略 @Where 注释吗?

4

5 回答 5

19

我只是有同样的问题。我解决了这样的问题:

@Query(value="SELECT * FROM EntityA", nativeQuery=true)
public ignoreWhereMethod(){}

@Query 注解中的 SQL 必须指向表名和字段名(不是实体名)。

于 2018-07-09T17:04:07.160 回答
11

经过大量研究,这似乎是不可能的。我强烈建议避免使用@Where,因为很难事先预测您是否需要这些关联。

于 2010-07-29T10:27:10.953 回答
9

我知道这是一个老问题,但万一有人在寻找答案......
我有同样的困境,你不想在你选择的每个地方都用“is_deleted = false”弄乱你的代码,

简单的解决方案是使用原生 SQL:

lst = sessionFactory.getCurrentSession().
createSQLQuery("select {entb.*}  from EntityB entb where  is_deleted=1")                            
           .addEntity("entb", EntityB.class)
           .list();
于 2011-11-01T02:59:04.500 回答
6

您可以使用相同的数据映射另一个属性,如下所示:

public class EntityA {

    @OneToMany
    @JoinColumn(name='theColumnName', insertable=false, updateable=false)
    private List<EntityB> entityBListReadOnly;

}

重要的是设置为可更新的 false 和可插入的 falso 以避免数据中的一致性问题!

于 2010-03-26T11:31:39.617 回答
1

另一种解决方案是过滤器,如本问题所述。 Hibernate如何忽略@Where注解

我将自己尝试这个,因为在我们的情况下,@where和的组合@NamedNativeQueries是一个非常麻烦的解决方案。但我还不知道是否@Filter会更好。

于 2020-01-10T10:21:59.033 回答