如何解决没有配置这样的过滤器 [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"); 我之前没有在配置中给出文件路径,所以它看不到过滤器的定义位置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。