基本上我现在所做的工作是为学校准备一些不同的 .jsp。 我可以添加类(class),也可以添加学生,也可以将学生添加到特定类(class)。我想了解的是如何只向学生显示用户(我)点击的特定类(class)。
<form action="http://localhost:8080/School/add" method="POST">
Kurs:
<select name="coursedrop">
<c:forEach items="${allCourses}" var="course">
<option value="${course.id}">${course.id}: ${course.coursename}</option>
</c:forEach>
</select>
Student:
<select name="studentdrop">
<c:forEach items="${allStudents}" var="student">
<option value="${student.id}">${student.id}: ${student.studentname}</option>
</c:forEach>
</select>
<input type="submit" value="Add"/>
</form>
上面显示的表格是两个下拉列表,一个用于类(class),另一个用于学生。例如,我可以将学生 nr.3 添加到类(class) nr.5 到我的数据库中。所以至少那是有效的..
我的下一步是向特定学生展示他们的特定类(class)。 我拥有的是一个 .jsp 页面,其中将所有类(class)列为可点击的链接。像这样:
<tbody>
<c:forEach items="${allCourses}" var="course">
<tr>
<td><a href="http://localhost:8080/School/course?id=${course.id}">${course.coursename}</a></td>
</tr>
</c:forEach>
</tbody>
当我单击其中一个链接(也称为类(class)名称)时,我会转到另一个 .jsp 页面,其中当前列出了所有学生,即使他们不属于我单击的特定类(class)。
这就是我的 servlet 的样子。 (如果太可怕了,我很抱歉)
@Inject
SchoolBoundary sb;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String path = request.getServletPath();
String redirect = "/home.jsp";
String forward = null;
switch(path) {
case "/student":
request.setAttribute("allStudents", sb.getAllStudents());
forward = "/student.jsp";
break;
case "/course":
request.setAttribute("allStudents", sb.getAllStudents());
forward = "/course.jsp";
break;
case "/add":
request.setAttribute("allCourses", sb.getAllCourses());
request.setAttribute("allStudents", sb.getAllStudents());
forward = "/add.jsp";
break;
case "/home":
request.setAttribute("allCourses", sb.getAllCourses());
forward = "/home.jsp";
break;
default:
request.setAttribute("allCourses", sb.getAllCourses());
forward = "/home.jsp";
}
request.getRequestDispatcher(forward).forward(request, response);
我可以看到我的“getAllStudents”将显示所有学生,而不是通过ID(这是我认为我需要的,但我不知道如何..)。 以及我的边界中的“getAllStudents”:
public Set<Student> getAllStudenter() {
return new HashSet(studentFacade.findAll());
}
回顾一下。我希望能够仅显示每个特定类(class)的学生,而不是所有类(class)的所有学生。感谢您的帮助:(
最佳答案
首先,我建议不要使用嵌入式 PK(除非您确实必须高度优化数据库模型,或者您无法更改现有模型,因为它不属于您的职责)。如果您添加一个简单的 ID(例如 tyoe Long)并在类(class) ID 和学生 ID 的字段上添加唯一约束,您将获得几乎相同的行为。它将需要数据库中更多的内存,但除非我们不讨论这个“连接表”中的大量行,否则这个额外的内存可以忽略不计。但您得到的返回是一个更容易处理的实体模型。
如果您想获取参加特定类(class)的所有学生,您可以为此编写一个简单的 JPQL 查询。
首先获取类(class)的引用资料。之后在 Kursinfo
中查询所有学生,其中类(class)等于您感兴趣的类(class)。基本上是这样的(它没有经过测试,可能包含小错误,但我想向您展示总体思路):
String query = "SELECT k.student FROM Kursinfo k WHERE k.kurs = :kurs";
TypedQuery<Student> q = entityManager.createQuery(query, Student.class);
q.setParameter("kurs", entityManager.getReference(kursId, Kurs.class));
return q.getResultList();
关于java - 如何使用jpa从数据库中获取特定的id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37308408/