我正在使用hibernate和gwt。如果我在main中运行查询,查询将返回预期的记录。 但是,如果我在DAO中执行相同的查询(由Web应用程序方法调用),则结果始终为空。它几天前确实有效,我没有用这张表改变任何东西。有什么方法可以追踪它吗?
由于
答案 0 :(得分:1)
从RPC运行userinfodao.getUserinfoBySessId始终返回空记录集。
public void clearlogin()
{
HttpSession session = getThreadLocalRequest().getSession();
UserinfoDAO userinfodao = new UserinfoDAO();
if(session != null)
{
Userinfo userinfo = userinfodao.getUserinfoBySessId(session.getId());
userinfodao.removeUserinfo(userinfo.getOid());
session.invalidate();
}
else
{
LogUtils.logInfo("Session has already been removed");
}
}
来自UserinfoDAO的* 方法,它始终不适用于gwt网络应用程序,但它在主*上很好
public Userinfo getUserinfoBySessId(String _sessId)
{
try
{
if(!session.isOpen())
{
session = HibernateUtil.getSessionFactory().openSession();
}
LogUtils.logInfo("UserinfoDAO.getUserinfoBySessId " + _sessId );
session.beginTransaction();
String hql="from Userinfo userinfo where userinfo.sessId = :sessId";
Query query = session.createQuery(hql);
query.setString("sessId", _sessId);
List list=query.list();
Userinfo tmpUserinfo=null;
Iterator it=list.iterator();
while(it.hasNext())
{
tmpUserinfo=(Userinfo)it.next();
}
return tmpUserinfo;
}
catch(Exception e)
{
return null;
}
}
从main运行,按预期工作
public static void main(String[] args)
{
UserinfoDAO userinfodao=new UserinfoDAO();
Userinfo userinfo = new Userinfo();
userinfo.setIp("172.16.95.102");
userinfo.setTm(new Date());
userinfo.setSessId("F30B837B52BB3E47D18B67A856C6A5AC");
userinfo.setUsername("peter");
userinfo.setAcctOid(111);
userinfodao.insertUserinfo(userinfo);
Userinfo userinfo1 = userinfodao.getUserinfoBySessId("F30B837B52BB3E47D18B67A856C6A5AC");
System.out.println(userinfo1.getAcctOid());
}