如何使用HibernateTemplate?

时间:2016-01-16 10:39:41

标签: spring hibernate

我正在执行检索操作以从数据库中获取学生列表。但我变得空虚了#39;数据库中的数据。使用过HibernateTemplate Spring与Hibernate集成,

域类: -

@Entity
@Table(name="student")
public class StdBO {
@Id
private int sno;
private String sname,sadd;
//setters and getters
}

如何使用HibernateCallBack()接口进行搜索操作?这是我第一次将spring与hibernate集成,以下方式是否正确?我尝试了很多方法来使用HibernateTemplate执行搜索操作,但未能获得详细信息

DAO

@Repository
public class StdDAO {
private HibernateTemplate ht;
public void setHt(HibernateTemplate ht) {
    this.ht = ht;
}
public List<StdBO> select(){

    List<StdBO> list = ht.executeFind(new HibernateCallback() {
        public Object doInHibernate(Session ses)
                throws HibernateException, SQLException {

            Criteria criteria=ses.createCriteria(StdBO.class);

            System.out.println("before printing sutdents");
            List<StdBO> bos = criteria.list();
            System.out.println("students are"+bos);//here getting empty list
            return bos;
        }

    });

    return list;
}

XML

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="myDataSource" />
    <property name="annotatedClasses">
        <list>
            <value>com.nt.dao.StdDAO</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
            <prop key="hibernate.current_session_context_class">thread</prop>
        </props>
    </property>
</bean>

<bean id="template" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<bean id="dao" class="com.nt.dao.StdDAO">
    <property name="ht" ref="template" />
</bean>

1 个答案:

答案 0 :(得分:0)

您需要开始(并提交)事务来查询数据。您可以session.beginTransaction()或使用@Transactional注释手动执行此操作。要使用@Transactional注释,您需要执行一些额外的弹簧配置: Hibernate Transaction Annotation Configuration