没有配置这样的过滤器 [shoesFilter]

问题描述

我看到了一些问题,但我没有找到任何对我有帮助的答案。

@Filters({
        @Filter(name = "shoesFilter",condition = ":minShoeSize <= shoeSize and :maxAge >= shoeSize"),@Filter(name = "shoesFilter",condition = ":minNumber <= number")
})
@Entity
@Table(name = "Shoes",catalog = "shoues")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Shoes {
    @Id
    @Column(name = "id")
    private Integer id;

    @Column(name = "shoe")
    private Integer shoeSize;

}

并且 ı 在 hbm.xml 中定义

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <filter-def name="shoesFilter">
        <filter-param name="maxShoeSize" type="integer"/>
        <filter-param name="minShoeSize" type="integer"/>
        <filter-param name="minNumber" type="integer"/>
    </filter-def>
</hibernate-mapping>

在我调用我的代码之后

 public static void main(String[] args) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        System.out.println("enable filter");
        Filter filter = session.enableFilter("shoesFilter");
        filter.setParameter("maxShoeSize",40);
        filter.setParameter("minShoeSize",22);
        filter.setParameter("minNumber",27);
        session.beginTransaction();
        List<Shoes> result = session.createquery("from Shoes").list();
        for (Shoes s : result) {
            System.out.println("sad" + s.getShoeSize() + "fds" + s.getId());
        }
        System.out.println("--Apply where clause--");
        System.out.println("--disable Filter--");
        session.disableFilter("shoesFilter");

        session.close();

    }

当我运行代码时,出现以下错误

Exception in thread "main" org.hibernate.HibernateException: No such filter configured [shoesFilter]
    at org.hibernate.internal.SessionFactoryImpl.getFilterDeFinition(SessionFactoryImpl.java:982)
    at org.hibernate.engine.spi.LoadQueryInfluencers.enableFilter(LoadQueryInfluencers.java:134)
    at org.hibernate.internal.SessionImpl.enableFilter(SessionImpl.java:2327)
    at com.example.hibernateperformance.HibernatePerformanceApplication.main(HibernatePerformanceApplication.java:25)

我已经看到很多关于这个主题的问题和答案,但这些答案对我没有帮助。您看到任何遗漏的项目吗? 谢谢

解决方法

我意识到我哪里出错了。正如你在主文件中看到的那样。我写了

HibernateUtil.getSessionFactory().openSession();

里面是这样的

@Component
public class HibernateUtil {
    private static SessionFactory sessionFactory ;
    static {
        Configuration configuration = new Configuration().configure("shoes.hbm.xml");
        StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
        sessionFactory = configuration.buildSessionFactory(builder.build());
    }
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

这里 ->Configuration().configure("shoes.hbm.xml"); 我之前没有在配置中给出文件路径,所以它看不到过滤器的定义位置。