当我使用Query作为结果值

时间:2017-07-21 12:58:29

标签: java hibernate

我正在使用以这种方式调用其他类的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)它可以工作......为什么?我做错了什么?

奇怪的是,如果我在两个不同的类和其他表中使用查询,我没有这个问题......

1 个答案:

答案 0 :(得分:0)

这是因为数据库事务的范围是无状态EJB。现在,在数据库事务之外访问结果List。