@OneToMany关系上的Hibernate @Filter没有任何效果

时间:2015-01-12 11:33:47

标签: hibernate filter querydsl

我正在使用Hibernate来映射我的实体和查询的QueryDSL。我的实体部门有很多Familia,我想只过滤FMODIFICACION列为空的那些。这是我的部门实体:

@FilterDef(name = "FAMILIA_FILTRO_FECHA")
@Entity
public class Sector {
    ...
    private List<Familia> familiasList;

    @OneToMany(mappedBy = "sector")
    @Filter(name = "FAMILIA_FILTRO_FECHA", condition = "FMODIFICACION IS NULL")
    public List<Familia> getFamiliasList() {
        return familiasList;
    }
    ...
}

这是查询(使用QueryDSL):

public List<Sector> getSectores() {

    //enable filter
    Session session = entityManager.unwrap(Session.class);
    Filter filtroFamilia = session.enableFilter("FAMILIA_FILTRO_FECHA");

    //perform query
    QSector qSector = QSector.sector;
    JPAQuery query = new JPAQuery(entityManager);
    List<Sector> sectores = query.from(qSector).list(qSector);

    // disable filter
    session.disableFIlter("FAMILIA_FILTRO_FECHA");
    return sectores;
}

但是这个查询正在检索所有的Familia。我究竟做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

解决!如果在同一事务中禁用了过滤器,则它似乎对查询没有影响。解决方案就是删除这一行:

session.disableFIlter("FAMILIA_FILTRO_FECHA");