我正在使用以这种方式调用其他类的Web方法:
@WebMethod
public List <User> findUser(
) throws Exception {
List <User> resultList = new LinkedList<User>();
Iterator iterUser = queryF.searchUser().getResultList().iterator();
while (iterUser .hasNext()){
Users u = (Users ) iterUser .next();
resultList.add(u.getUser());
}
return resultList;
}
注意:queryF是QueryF类的EJB
另一类QueryF是这样的:
@Stateless
@Proxy(lazy = false)
public class QueryF{
EntityManager em3;
public Query searchUser() throws Exception{
Query q = em3.createQuery("FROM users");
if(q.getResultList().isEmpty()){
throw new Exception();
}
return q;
}
}
这个webmethod的结果是“org.hibernate.SessionException:Session被关闭了!” 奇怪的是,如果我使用List而不是查询方法的结果(searchUser)它可以工作......为什么?我做错了什么?
奇怪的是,如果我在两个不同的类和其他表中使用查询,我没有这个问题......
答案 0 :(得分:0)
这是因为数据库事务的范围是无状态EJB。现在,在数据库事务之外访问结果List。