无法创建从数据库休眠 mySQL + Spring mvc 获取数据的方法

Can't create method to get data from database hibernate mySQL + Spring mvc

my page

非常希望得到您的帮助!情况是这样的:我试图从数据库中获取我的学科的值,这些学科与学期相关。在显示页面中,用户必须 select 他需要的学期,然后他点击 selection 按钮,将显示与该学期相关的所有学科。但我总是得到同样的错误“源服务器没有找到目标资源的当前表示或不愿意透露它的存在。”我附上了我为执行此操作而编写的所有代码。

<tr>
    <td style="font-size: large;">Select semester</td>
    <td style="padding-left: 50px">
        <select>
            <c:forEach items="${semestr}" var="semestr">
                <c:url var="chooseButton" value="/chooseSemester">
                    <c:param name="semId" value="${semestr.id}"/>
                </c:url>
                <option value="${semestr.id}">${semestr.name}</option>
            </c:forEach>
        </select>
    </td>
    
    <td style="padding-left: 20px">
        <input type="submit" value="Select" id="button" onclick="window.location.href = 'chooseButton'">
    </td>
</tr>

@RequestMapping("chooseSemester")
public String chooseSemester(@RequestParam("semId")int semId,Model model){
    List<Discipline> allDisciplines = service.getDisciplineSemestrId(semId);
    model.addAttribute("allDisc", allDisciplines);
    return "semestr";
}
package com.kushnirmark.spring.project.DAO;

import com.kushnirmark.spring.project.entity.Discipline;
import com.kushnirmark.spring.project.entity.Semestr;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class SemestrImpl implements SemestrDAO {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public List<Semestr> getSemestr() {
        Session session = sessionFactory.getCurrentSession();
        List<Semestr> semestrs = session.createQuery("from Semestr", Semestr.class).getResultList();
        return semestrs;
    }

    @Override
    public List<Discipline> getDisciplineSemestr() {
        Session session = sessionFactory.getCurrentSession();
        List<Discipline> discSem = session.createQuery("select a.discipline from Discipline a" +
                " inner join Semestr_Disc b on a.id=b.id_discipline where b.id_semestr = 1 ").getResultList();
        return discSem;
    }

    @Override
    public List<Discipline> getDisciplineSemestrId(int semId) {
        Session session = sessionFactory.getCurrentSession();
        Query<Discipline>query = session.createQuery("select a.discipline from" +
                " Discipline a inner join Semestr_Disc b on a.id=b.id_discipline where b.id_semestr =:semId");
        query.setParameter("semId",semId);
        query.executeUpdate();
        return (List<Discipline>) query;
    }


    @Override
    public void saveNewSemester(Semestr semestr) {
        Session session = sessionFactory.getCurrentSession();
        session.saveOrUpdate(semestr);
    }
}

SemestrImpl 中 getDisciplineSemestrId 的实现看起来很可疑。您创建 select 查询,然后对其执行更新,并且 return 查询本身转换为列表。

试试这个:

    @Override
    public List<Discipline> getDisciplineSemestrId(int semId) {
        Session session = sessionFactory.getCurrentSession();
        Query<Discipline>query = session.createQuery("select a.discipline from" +
                " Discipline a inner join Semestr_Disc b on a.id=b.id_discipline where b.id_semestr =:semId");
        query.setParameter("semId",semId);
        return query.getResultList();
    }

Query getResultList() 执行 select 查询并 return 返回结果,而 executeUpdate() 执行更新或删除语句。

原来是想出了这个问题的解决方法,他们帮我在这个题目中添加了controller,写完之后,从数据库中获取数据就可以正常工作了,看起来是这样的:

@Override
public List<Discipline> getDisciplineSemestrId(int id) {
    Session session = sessionFactory.getCurrentSession();
    Query<Discipline>query = session.createQuery("select a.discipline from" +
            " Discipline a inner join Semestr_Disc b on a.id=b.id_discipline where b.id_semestr =:semId");
    query.setParameter("semId",id);
    return query.getResultList();
}

从 jsp 页面获取数据时也有问题,现在获取数据的正确代码如下所示:

<form action="${pageContext.request.contextPath}/allSemestrsSem" method="get">
    <tr>
        <td style="font-size: large;">Select semester</td>
        <td style="padding-left: 50px">
            <select name="selectSemestr">
                <c:forEach items="${semestr}" var="semestr">
                    <option value="${semestr.id}">${semestr.name}</option>
                </c:forEach>
            </select>
        </td>
        <td style="padding-left: 20px">
            <security:authorize access="hasRole('ADMIN')">
            <input type="submit" id="button" value="select"/>
        </td>
        </security:authorize>
    </tr>
</form>

缺少适当的包装,但现在一切正常。我希望我的问题的解决方案对某些人也有用,我已经尝试了 10 天,现在一切正常

这是我的控制器的样子:

    @RequestMapping(value = "/allSemestrsSem" , method = RequestMethod.GET)
    public String allSemestrs(@RequestParam(name = "selectSemestr")String selectSemestr, Model model) {
        List<Semestr> semestr = service.getSemestr();
        model.addAttribute("semestr", semestr);
        List<Discipline> allDisciplines = service.getDisciplineSemestrId(Integer.valueOf(selectSemestr));
        model.addAttribute("allDisc", allDisciplines);
        return "semestr";
    }