【问题标题】:Spring HibernateDaoSupport not enabling hibernate filtersSpring HibernateDaoSupport 不启用休眠过滤器
【发布时间】: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


【解决方案1】:

将以下配置添加到 student.xml 并尝试:

     <filter name="addressFilter" condition="sname = :addressFilterParam" />
 </class>
<filter-def name="addressFilter">
   <filter-param name="addressFilterParam" type="java.lang.String"/>
 </filter-def>

【讨论】:

    猜你喜欢
    • 2015-07-19
    • 2012-06-26
    • 2019-08-26
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2014-11-16
    • 2017-06-08
    • 1970-01-01
    相关资源
    最近更新 更多