我正在使用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。我究竟做错了什么?
谢谢!
答案 0 :(得分:0)
解决!如果在同一事务中禁用了过滤器,则它似乎对查询没有影响。解决方案就是删除这一行:
session.disableFIlter("FAMILIA_FILTRO_FECHA");