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



我的页面

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

<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查询,但随后对其执行更新,并将查询本身强制转换为List。

试试这个:

@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((执行更新或删除语句。

事实证明,为了找到这个问题的解决方案,他们帮助我在这个主题中添加了控制器,在编写之后,从数据库中获取数据工作正常,看起来像这样:

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

最新更新