忽略Hibernate @Where注释

Zec*_*tes 16 annotations hibernate where-clause

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

public class EntityA {

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

}
Run Code Online (Sandbox Code Playgroud)

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

Zec*_*tes 12

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

  • 请删除此评论,因为它是错误的。 (2认同)

小智 8

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

@Query(value="SELECT * FROM EntityA", nativeQuery=true)
public ignoreWhereMethod(){}
Run Code Online (Sandbox Code Playgroud)

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


use*_*026 7

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

简单的解决方案是使用本机SQL:

lst = sessionFactory.getCurrentSession().
createSQLQuery("select {entb.*}  from EntityB entb where  is_deleted=1")                            
           .addEntity("entb", EntityB.class)
           .list();
Run Code Online (Sandbox Code Playgroud)


Gab*_*iel 6

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

public class EntityA {

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

}
Run Code Online (Sandbox Code Playgroud)

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