【问题标题】:Can't create method to get data from database hibernate mySQL + Spring mvc无法创建从数据库休眠 mySQL + Spring mvc 获取数据的方法
【发布时间】:2022-01-23 20:31:04
【问题描述】:

my page

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

<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);
    }
}

【问题讨论】:

    标签: java mysql spring hibernate


    【解决方案1】:

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

    试试这个:

        @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();
        }
    

    QuerygetResultList() 执行选择查询并返回结果,而 executeUpdate() 执行更新或删除语句。

    【讨论】:

    • 感谢您的回复!这比我写的更合乎逻辑:)但不幸的是,错误并没有在任何地方消失,也许我不仅在数据库查询中遇到了问题,控制器中的某些东西也没有写错?我对编写 jstl 代码有疑问,因为我写的一切都是直观的。我会等待答复,再次感谢答复!!!
    • 我发现为什么会出现显示错误,我没有把要处理的按钮名称取到${}表单中。现在,当我单击选择按钮时,该方法对我来说可以正常工作,但它没有看到学期 ID,我可能没有正确获得它。制定方法时,将 id 替换为“?” ,通过jstl告诉我我做错了什么?
    • @MarkKush 使用chooseSemester 方法的当前配置,对后端的请求应该是这样的 - /chooseSemester?semId=0。你是这样发送学期ID的吗?
    • @RequestParam("semId")int semId using this parameter 我试图将学期 id 值传递给方法参数,当我单击“${chooseButton}”按钮时,我按照链接以便将所有这些传递给该方法。也许我没有正确提取id??我只是很不擅长 jstl .... 这就是为什么我请求你的帮助))
    • 你能检查一下你发送的请求是否正确吗?您可以在浏览器的开发人员工具、网络选项卡中查看请求。这样您就可以查看在 jstl 中查找错误是否是正确的方向,或者完全是另外一回事。
    【解决方案2】:

    原来是想出了解决这个问题的办法,他们帮我在这个题目中添加了控制器,写完后,从数据库中获取数据正常工作,如下所示:

    @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";
        }
    

    【讨论】:

      猜你喜欢
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      相关资源
      最近更新 更多