并发调用API以返回不同的对象

我有以下场景 查询结果:
student1  subject1  marks1
student2  subject1  marks3
...
...
API代码如下所示
StudentObj getStudentInfo() {
    List<StudentObj> stObj = StudentDAO.getRows(); //

    for (StudentObj s : stObj) {
       //What should I write here??
    }
}
我希望能够在并发调用API时单独返回student1行,student2行。 我在oracle数据库之上使用Hibernate(我比较新)。 我正在考虑锁定student1行并返回该行,但我并不熟悉锁定hibernate。 在客户端
time t1: getStudentInfo() (work on student1) |  getStudentInfo() //Call concurrently (work on student2)

time t1+10sec: getStudentInfo (work on student3)
time t1+20sec: getStudentInfo (work on student4)
第一次调用应该能够在student1上工作,第二次并发调用应该能够在student2上工作。 编辑:根据评论进行更改。 (我无法编辑查询,如果有帮助,客户端getStudentInfo无法传递id)。     
已邀请:
编辑:同步方法,并保留学生的迭代器,并为每个调用返回下一个。
Iterator<StudentObj> students;

synchronized StudentObj getStudentInfo() {
    if (null == students || !students.hasNext()) {
        students = StudentDAO.getRows().iterator();
    }
    return students.next();
}
    
看看下面的代码是否有帮助。您需要做的就是确保为sequenceNumber分配了正确的起始值。这是我根据您提供的信息提供的最佳信息。 当你无法修改查询时,我仍然对你提到hibernate的原因感到困惑。你的查询怎么写的方式?我看到有可能使用Hibernate过滤器,但你仍然需要在某处维护sequenceNumber。在不了解更多细节的情况下很难提供适当的解决方案。
class SomeClass 
{
    private final static AtomicLong sequenceNumber = new AtomicLong(0);
    public static long next() 
    { 
        return sequenceNumber.getAndIncrement(); 
    }

    StudentObj getStudentInfo() 
    {
        List<StudentObj> stObj = StudentDAO.getRows(); //

        for (StudentObj s : stObj) 
        {
            long filter = next();
           //use filter to send the appropriate student info
        }
    }
}
    

要回复问题请先登录注册