【发布时间】:2018-03-16 03:00:21
【问题描述】:
为什么 HibernateDaoSupport 没有启用休眠过滤器。我试图在我的代码中启用过滤器但没有启用。我已经发布了 spring 和 xml 配置文件,如下所示。我已经提供了所有文件。
EmployeeHibernateDao.java:
public class EmployeeHibernateDao extends HibernateDaoSupport {
public void saveDetails(Student s){
getSession().merge(s);
}
public void getDetails(){
Criteria ct= getSession().createCriteria(Student.class);
getSession().enableFilter("addressFilter");
List<Student> list = ct.list();
for(Student s: list){
System.out.println(s.getSname());
}
}
}
学生.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.spring.hibernatedao.Student" table="student24">
<composite-id class="com.spring.hibernatedao.Address" name="address">
<key-property name="addressNo" column="addressno" />
<key-property name="addressName" column="addressname" />
</composite-id>
<property name="sname" column="sname" />
<property name="date" column="inserteddate" />
<filter name="addressFilter" condition="sname = 'hello'" />
</class>
<filter-def name="addressFilter" />
</hibernate-mapping>
applicationContext.xml:
<beans>
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="system" />
<property name="password" value="system" />
</bean>
<bean id="myssessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="datasource" />
<property name="mappingResources">
<list>
<value>/com/spring/hibernatedao/student.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
</props>
</property>
</bean>
<bean id="empdao" class="com.spring.hibernatedao.EmployeeHibernateDao">
<property name="sessionFactory" ref="myssessionFactory" />
</bean>
Test.java:
public class Test {
public static void main(String[] args) {
ApplicationContext ct=new ClassPathXmlApplicationContext("com/spring/hibernatedao/applicationContext.xml");
EmployeeHibernateDao empdao= ct.getBean("empdao", EmployeeHibernateDao.class);
empdao.getDetails();
}
}
【问题讨论】:
-
对于初学者,你不应该使用
HibernateDaoSupport,而是直接使用普通的hibernate。这个类源于 Hibernate 不允许轻松集成的过去。话虽如此,我建议检查getSession方法的实际作用。简而言之,您有 2 个单独的会话。调用getSession一次并重复使用给定的会话。
标签: spring hibernate hibernate-mapping hibernate-criteria