【问题标题】:session.createQuery() doesnot return list in springsession.createQuery() 在春季不返回列表
【发布时间】:2016-11-17 20:49:09
【问题描述】:

我正在尝试从数据库中获取所有数据,但问题是session.createQuery("Project") 返回null 列表,所以这是我的ProjectDao,其中所有会话查询都执行良好。

我不知道我尝试过的代码有什么问题getCurrentSession()。当我调试代码时,它返回List<Project> 并使用null 列表抛出异常。

package np.com.drose.studentmanagementsystem.dao.impl;

import java.io.Serializable;
import java.util.List;
import javax.transaction.Transactional;
import np.com.drose.studentmanagementsystem.dao.ProjectDAO;
import np.com.drose.studentmanagementsystem.model.Project;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

/**
 *
 * @author bibekshakya
 */

@Repository
public class ProjectDAOImpl implements ProjectDAO{

    @Autowired
    SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }


    @Override
    @Transactional
    public int insertProject(Project project) {
        Session session =sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.saveOrUpdate(project);
        tx.commit();
        Serializable id= session.getIdentifier(project);
        session.close();
        return (Integer)id;
    }

    @Transactional
    @Override
    public List<Project> getProjectList() {
        Session session =sessionFactory.openSession();
        Transaction tx=session.beginTransaction();
        List<Project> result =(List<Project>)session.createQuery("Project").list();
        tx.commit();
        session.close();
        return result;

    }
}

这是我用于休眠的 dispatcher.xml 文件配置

<bean id="hibernate4AnnotatedSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan">
        <list>
            <value>np.com.drose.studentmanagementsystem.model</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.current_session_context_class">thread</prop>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.jdbc.use_get_generated_keys">true</prop>
            <prop key="hibernate.connection.isolation">2</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>
 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory"/>
</bean> 
<bean id="persistenceExceptionTranslationPostProcessor" class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

这是我的控制器类

@RequestMapping(value = "/list",method = RequestMethod.GET)
public ModelAndView listProject(){
     List<Project> projectList=new ArrayList<Project>();
    try {

        log.info("Inside list of project");
        projectList=projectService.getProjectList();          

    } catch (Exception e) {
        log.info("error of getting list of project : "+e);
    }
    return new ModelAndView("/project/list","projectList",projectList);
}

这里是视图

<c:forEach items="${listProject}" var="list" varStatus="status">
                <tr>
                    <td><span style="margin: 20px; font-size: 14px; color: #101010;">${status.count}</span></td>
                    <td><span style="margin:30px;font-size: 14px;color: #101010;">${list.projectName}</span></td>
                    <td><span style="margin: 30px;font-size: 14px;color: #101010;">${list.projectResource}</span></td>
                    <td><span style="margin: 30px; text-align: center; font-size:12px;color: #101010;">${list.teamName}</span></td>
                    <td>
                        <span id="progressBar"></span>
                        <script>
                            $(function () {
                                $("#progressBar").progressbar({
                                    value: 32
                                });
                            });
                        </script>

                    </td>
                    <td>
                        <a href="/StudentManagementSystem/project/edit/${list.projectId}" class="btn btn-info"><i class="glyphicon glyphicon-edit"></i> Edit</a></td><td>
                        <a href="/StudentManagementSystem/project/delete/${list.projectId})" class="btn btn-danger"><i class="glyphicon glyphicon-remove"></i> Project Finish</a>
                    </td>
                </tr>
            </c:forEach>

【问题讨论】:

    标签: java spring hibernate session hql


    【解决方案1】:

    试试这个效果:

    List<Project> result = session.createCriteria(Project.class).list();
    

    您不需要投射列表:(List&lt;Project&gt;)

    【讨论】:

    【解决方案2】:

    试试

    session.createQuery("from Project").list();
    

    您错过了 HQL 中用于解析查询的 from 子句。

    【讨论】:

    • 我对先生做了这件事。但结果还是一样
    • 你检查异常了吗?
    【解决方案3】:

    您可以使用session.createCriteria(Project.class).list(); 这将返回所有可用的行。

    【讨论】:

    • 谢谢您,先生,它确实有效,但您能告诉我为什么我以前的无效
    • 能不能查一下数据库,看看Person类中定义的表里有没有值
    • 是的,数据库中有数据,对我之前误解的评论表示抱歉。我的问题是我已经在我的另一个对象中完成了这个代码模式,它工作正常,但是在这个对象中为什么它不工作,再次感谢你
    • @B'bekShakya 请检查课程项目是否在包 np.com.drose.studentmanagementsystem.model 中。另外,你说有一个异常,你能分享一下堆栈跟踪吗?
    • @B'bekShakya 抱歉,之前误读了评论。请忽略以上评论。前一个不起作用,因为您应该使用 session.createHQLQuery("from Project").list()
    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2018-06-19
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多