Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用jpa从数据库中获取特定id?_Java_Jsp_Jpa_Jakarta Ee - Fatal编程技术网

Java 如何使用jpa从数据库中获取特定id?

Java 如何使用jpa从数据库中获取特定id?,java,jsp,jpa,jakarta-ee,Java,Jsp,Jpa,Jakarta Ee,基本上我现在工作的是我有一些不同的.jsp的学校。 我可以添加课程,我可以添加学生,也可以将学生添加到特定课程。我想了解的是,我将如何只向学生展示用户(我)点击的特定课程 我可以看到我的“getAllStudents”将显示所有学生,而不是id(这是我认为我需要的,但我不知道如何…)。 还有我的“getAllStudents”来自我的边界: public Set<Student> getAllStudenter() { return new HashSet(stude

基本上我现在工作的是我有一些不同的.jsp的学校。 我可以添加课程,我可以添加学生,也可以将学生添加到特定课程。我想了解的是,我将如何只向学生展示用户(我)点击的特定课程

我可以看到我的“getAllStudents”将显示所有学生,而不是id(这是我认为我需要的,但我不知道如何…)。 还有我的“getAllStudents”来自我的边界:

    public Set<Student> getAllStudenter() {
    return new HashSet(studentFacade.findAll());
}
public Set getAllStudenter(){
返回新的HashSet(studentFacade.findAll());
}

重述。我希望能够只显示每个特定课程中的学生,而不是所有课程中的所有学生。感谢您的帮助:(

您需要在后端(而不是servlet)中实现一个名为
findAllByCourseId(Long-courseId)
的方法-类似于以下内容:

public Set<Student> findAllByCourseId(Long courseId) {
    return new HashSet(studentFacade.findAllByCourseId(courseId));
}
最后,添加接口的实现(如果有)并实现新方法

// filter the all list or use your own query
public Set<Student> findAllByCourseId(Long courseId) {
    // this is filtering
    List<Student> allStudents = findAll();
    List<Student> filteredList = new ArrayList<Student>();

    for(Student student : allStudents ){
        if( student.getCourseId() == courseId ){
           filteredList.add(student);
        }
    }

    return new HashSet(filteredList);
}
//筛选所有列表或使用您自己的查询
公共设置findAllByCourseId(长课程ID){
//这是过滤
列出所有学生=findAll();
List filteredList=新建ArrayList();
for(学生:所有学生){
if(student.getCourseId()==courseId){
filteredList.add(学生);
}
}
返回新的哈希集(filteredList);
}

首先,我建议不要使用嵌入式PK(除非您真的必须高度优化数据库模型,或者您无法更改现有模型,因为这超出了您的职责)。如果您添加一个简单的ID(例如,tyoe Long),您将有几乎相同的行为并在课程ID和学生ID的字段上添加一个唯一的约束。它将需要数据库中更多的内存,但除非我们不是在这个“联接表”中讨论太多的行,否则这个额外的内存是负的。但作为回报,您得到的是一个更易于处理的实体模型

如果您想让所有参加特定课程的学生都参加,您可以为此编写一个简单的JPQL查询

首先获取课程的参考。然后查询
Kursinfo
中的所有学生,其中课程等于您感兴趣的课程。基本上是这样的(它没有经过测试,可能包含一些小错误,但我想向您展示一下大致思路):

String query=“从Kursinfo k中选择k.student,其中k.kurs=:kurs”;
TypedQuery q=entityManager.createQuery(查询,Student.class);
q、 setParameter(“kurs”,entityManager.getReference(kursId,kurs.class));
返回q.getResultList();

听起来您需要实现自己的
。findAllByCourseId(Long-courseId)
方法-将其添加到界面并编写自己的查询(或从
findAll()列表中过滤结果)@ochi这就是我所需要的。我只是不知道如何编写它。这些后端的东西对我来说都是新的,所以我在这里暗中拍摄来完成这项工作。有一个.find(id)方法,我认为我可以使用,但我不确定如何:(有帮助吗?
find(id)
会发现一个学生的id,这不是你想要的。我不一定要为你写,但我可以给你一些提示answer@ochi我确实有一个查询,我可以得到我想要的,只有每个特定课程的学生。我不知道在哪里/如何使用我自己的查询。我是在我的边界类中还是在我的服务中这样做可能两者都有。你不应该查询所有学生,然后在后端进行筛选。使用JPA已经在DB级别进行筛选。想想一所大学,可能有3万名学生,但某一特定课程可能只有20名学生。这是一个真实、公平的评论。这不是一个最佳的方式
    public Set<Student> getAllStudenter() {
    return new HashSet(studentFacade.findAll());
}
public Set<Student> findAllByCourseId(Long courseId) {
    return new HashSet(studentFacade.findAllByCourseId(courseId));
}
Set<Student> findAllByCourseId(Long courseId);
// filter the all list or use your own query
public Set<Student> findAllByCourseId(Long courseId) {
    // this is filtering
    List<Student> allStudents = findAll();
    List<Student> filteredList = new ArrayList<Student>();

    for(Student student : allStudents ){
        if( student.getCourseId() == courseId ){
           filteredList.add(student);
        }
    }

    return new HashSet(filteredList);
}
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();