奇怪的classCastException hibernate 3.5 glassfish [英] Strange classCastException hibernate 3.5 glassfish

查看:116
本文介绍了奇怪的classCastException hibernate 3.5 glassfish的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,我无法自己解决。
我有一个war文件打包在ear中,并且运行在glassfish 3.0.1上,并且hibernate 3.5作为JPA provider。我用maven编译它,并用想法或手动部署它。
每隔一段时间,我都会在DAO中获得一个强制转换异常:

  java.lang.ClassCastException:com.myproject。 domain.entity.User不能转换为
com.myproject.domain.entity.User

其他时候,它工作得很好。这种行为没有模式。
有人会对这里发生的事情有所了解吗?



在com.myproject.domain.dao处引发异常
的示例方法。 UserDAOImpl.checkUserSessionValid(UserDAOImpl.java:195)

  public User checkUserSessionValid(String sessionId){
User user = null ;
EntityManager em = provider.entityManager();

尝试{
em.getTransaction()。begin();
// Query q = em.createQuery(SELECT u FROM User u WHERE u.session.sessionId =:sessionId);没有什么区别:/
Query q = em.createQuery(SELECT u FROM User u WHERE u.session.sessionId =:sessionId,User.class);
q.setParameter(sessionId,sessionId);
user =(User)q.getSingleResult();

em.getTransaction()。commit();
} catch(NoResultException忽略){

} finally {
em.close();
}

返回用户;
}

我的图书馆
[信息] + - org.apache.geronimo.specs:geronimo-jpa_2.0_spec:jar:1.0:提供
[信息] + - javax.validation:validation-api:jar:1.0.0.GA:编译
[INFO] + - org.hibernate:hibernate-annotations:jar:3.5.1-Final:compile
[ INFO] | + - org.hibernate:hibernate-core:jar:3.5.1-Final:编译
[INFO] | | + - antlr:antlr:jar:2.7.6:编译
[INFO] | | + - commons-collections:commons-collections:jar:3.2.1:编译
[INFO] | | + - dom4j:dom4j:jar:1.6.1:编译
[INFO] | | | \ -xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] | | javax.transaction:jta:jar:1.1:提供(作用域由编译管理)
[INFO] | + - org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile
[INFO] | + - org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.5.2:编译
[INFO] + - org.hibernate:hibernate-entitymanager:jar:3.5.1-Final:编译
[INFO ] | + - cglib:cglib:jar:2.2:编译
[INFO] | | \ - asm:asm:jar:3.1:编译
[INFO] | \ javassist:javassist:jar:3.9.0.GA:编译
[INFO] + - org.hibernate:hibernate-validator:jar:4.1.0.Final:compile
[INFO] + - org.slf4j:slf4j-simple:jar:1.5.2:test
[INFO] + - mysql:mysql-connector-java:jar:5.1.13:test
[INFO] + - org .hsqldb:hsqldb:jar:2.0.0:test


解决方案

对于通过谷歌来到这里的所有人来说,这个问题出现在4.3.6及以上: https: //http://hibernate.atlassian.net/browse/HHH-9446



降级到Hibernate 4.3.5为我们的团队提供了技巧。


Hi I have a problem that I can't solve on my own. I have a war file packaged in ear and running on glassfish 3.0.1 with hibernate 3.5 as JPA provider. I compile it with maven and deploy it with idea or manually. Every other time I get a cast exception in my DAOs:

java.lang.ClassCastException: com.myproject.domain.entity.User cannot be cast to 
com.myproject.domain.entity.User

Other times it works perfectly fine. There is no pattern in this behaviour. Could someone shine some light on what is happening here?

Example method where the exception was thrown at com.myproject.domain.dao.UserDAOImpl.checkUserSessionValid(UserDAOImpl.java:195)

public User checkUserSessionValid(String sessionId) {
        User user = null;
        EntityManager em = provider.entityManager();

        try {
            em.getTransaction().begin();
           //Query q = em.createQuery("SELECT u FROM User u WHERE u.session.sessionId = :sessionId"); makes no difference :/
            Query q = em.createQuery("SELECT u FROM User u WHERE u.session.sessionId = :sessionId",User.class);
            q.setParameter("sessionId", sessionId);
            user = (User) q.getSingleResult();

            em.getTransaction().commit();
        } catch (NoResultException ignored) {

        } finally {
            em.close();
        }

        return user;
 }

My libraries
[INFO] +- org.apache.geronimo.specs:geronimo-jpa_2.0_spec:jar:1.0:provided
[INFO] +- javax.validation:validation-api:jar:1.0.0.GA:compile
[INFO] +- org.hibernate:hibernate-annotations:jar:3.5.1-Final:compile
[INFO] |  +- org.hibernate:hibernate-core:jar:3.5.1-Final:compile
[INFO] |  |  +- antlr:antlr:jar:2.7.6:compile
[INFO] |  |  +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO] |  |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] |  |  \- javax.transaction:jta:jar:1.1:provided (scope managed from compile)
[INFO] |  +- org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile
[INFO] |  +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.5.2:compile
[INFO] +- org.hibernate:hibernate-entitymanager:jar:3.5.1-Final:compile
[INFO] |  +- cglib:cglib:jar:2.2:compile
[INFO] |  |  \- asm:asm:jar:3.1:compile
[INFO] |  \- javassist:javassist:jar:3.9.0.GA:compile
[INFO] +- org.hibernate:hibernate-validator:jar:4.1.0.Final:compile
[INFO] +- org.slf4j:slf4j-simple:jar:1.5.2:test
[INFO] +- mysql:mysql-connector-java:jar:5.1.13:test
[INFO] +- org.hsqldb:hsqldb:jar:2.0.0:test

解决方案

For all of you coming here via google, this problem is present in 4.3.6 and up: https://hibernate.atlassian.net/browse/HHH-9446

Downgrading to Hibernate 4.3.5 did the trick for our team.

这篇关于奇怪的classCastException hibernate 3.5 glassfish的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆