GWT Gilead 与 Hibernate 整合时异常处理

gwt与Hibernate整合会遇到集合序列化的问题,由于Hibernate内部用了代理集合类,所以会抛出org.hibernate.collection.PersistenceList 不能被Gwt序列化的异常。
从网上找到谷歌的解决方案:http://code.google.com/intl/zh-CN/webtoolkit/articles/using_gwt_with_hibernate.html,使用Gilead来解决上述问题,但是却抛出如下异常:
java.lang.RuntimeException: java.lang.ClassCastException: java.util.HashMap cannot be cast to net.sf.gilead.pojo.gwt.IGwtSerializableParameter
继续在网上搜寻答案,没找到解决方案,绝望ing。。。。
后来又到Gilead官网去看看,似乎有了点眉目,于是将Google的代码
 private HibernateUtil gileadHibernateUtil = new HibernateUtil();

/**
* Constructor
*/
public MusicStoreServiceImpl() {
gileadHibernateUtil.setSessionFactory(com.google.musicstore.util.HibernateUtil
.getSessionFactory());

PersistentBeanManager persistentBeanManager = new PersistentBeanManager();
persistentBeanManager.setPersistenceUtil(gileadHibernateUtil);
persistentBeanManager.setProxyStore(new StatelessProxyStore());

setBeanManager(persistentBeanManager);
}

稍加改动成如下代码:

private HibernateUtil gileadHibernateUtil = new HibernateUtil();

/**
* Constructor
*/
public MusicStoreServiceImpl() {
gileadHibernateUtil.setSessionFactory(com.google.musicstore.util.HibernateUtil
.getSessionFactory());
//对于PersistentBeanManager,
//需要使用GwtConfigurationHelper.initGwtStatelessBeanManager(gileadHibernateUtil)
//这句话进行配置,而不是简单的new
PersistentBeanManager persistentBeanManager =
GwtConfigurationHelper.initGwtStatelessBeanManager(gileadHibernateUtil);
// 下面注释掉的这句话不需要
// persistentBeanManager.setProxyStore(new StatelessProxyStore());
setBeanManager(persistentBeanManager);
}

在业务方法里这样写[code]
public User validateUser(User user) {//在业务方法里这样写
Session session = gileadHibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();//这里必须加事务,不加Gilead会抛异常
user = (User)session.createQuery("from User u where u.username=? and u.password=?")
.setParameter(0, user.getUsername())
.setParameter(1, user.getPassword())
.uniqueResult();
session.getTransaction().commit();
return user;
}
[/code]
大功告成!再没有异常,成功将对象从Server端传到了Client端。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值