it-roy-ru.com

Hibernate исключение _ $$ _ javassist_0 не может быть приведено к javassist.util.proxy.Proxy

Здравствуйте! Я использую Java-приложение для разработки и получаю следующее исключение, когда пытаюсь получить данные с помощью hibernate.

Java.lang.ClassCastException: com.digitalticket.model.UserType_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy

Здесь трассировка стека

Java.lang.ClassCastException: com.digitalticket.model.UserType_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxy(JavassistLazyInitializer.Java:147)
    at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.Java:75)
    at org.hibernate.Tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.Java:771)
    at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.Java:4613)
    at org.hibernate.event.internal.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.Java:349)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.Java:270)
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.Java:150)
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.Java:1070)
    at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.Java:989)
    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.Java:716)
    at org.hibernate.type.EntityType.resolve(EntityType.Java:502)
    at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.Java:170)
    at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.Java:144)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.Java:1114)
    at org.hibernate.loader.Loader.processResultSet(Loader.Java:972)
    at org.hibernate.loader.Loader.doQuery(Loader.Java:920)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.Java:354)
    at org.hibernate.loader.Loader.doList(Loader.Java:2553)
    at org.hibernate.loader.Loader.doList(Loader.Java:2539)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.Java:2369)
    at org.hibernate.loader.Loader.list(Loader.Java:2364)
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.Java:126)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.Java:1682)
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.Java:380)
    at com.digitalticket.model.DAO.fetchAll(DAO.Java:204)
    at com.digitalticket.controller.IndexController.handleRequestInternal(IndexController.Java:22)
    at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.Java:154)
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.Java:50)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.Java:945)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.Java:876)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.Java:961)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.Java:852)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:731)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.Java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:844)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.Java:280)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.Java:254)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.Java:136)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.Java:341)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.Java:238)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.Java:3363)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.Java:3333)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.Java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.Java:120)
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.Java:57)
    at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.Java:2220)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.Java:2146)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.Java:2124)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.Java:1564)
    at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.Java:254)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.Java:550)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.Java:295)
    at weblogic.work.ExecuteThread.run(ExecuteThread.Java:254)

Вот мой код 

public T fetchAll(tClass<T> className) {

    Session s = sessionFactory.getCurrentSession();
    s.beginTransaction();

    try {

        List<T> results = (List<T>) sessionFactory.getCurrentSession()
                .createCriteria(className)
                .list();

        s.getTransaction().commit();

        return results();

    } catch (NullPointerException ex) {
        return null;
    }
    catch (RuntimeException re) {
        s.getTransaction().rollback();
        throw re;
    } finally {

    }
}

Вот мои объекты 

public class User implements Java.io.Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -2383716625869790753L;
    private long userId;
    private UserType userType;
    private String email;
    private String password;
    private String name;
    private String surname;
    private String middlename;
    private Set<Ticket> tickets = new HashSet<Ticket>(0);
    private Set<Organization> organizations = new HashSet<Organization>(0);

    public User() {
    }

    public User(long userId, String email, String password, String name,
            String surname) {
        this.userId = userId;
        this.email = email;
        this.password = password;
        this.name = name;
        this.surname = surname;
    }

    public User(long userId, UserType userType, String email, String password,
            String name, String surname, String middlename,
            Set<Ticket> tickets, Set<Organization> organizations) {
        this.userId = userId;
        this.userType = userType;
        this.email = email;
        this.password = password;
        this.name = name;
        this.surname = surname;
        this.middlename = middlename;
        this.tickets = tickets;
        this.organizations = organizations;
    }

    public long getUserId() {
        return this.userId;
    }

    public void setUserId(long userId) {
        this.userId = userId;
    }

    public UserType getUserType() {
        return this.userType;
    }

    public void setUserType(UserType userType) {
        this.userType = userType;
    }

    public String getEmail() {
        return this.email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return this.password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return this.surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public String getMiddlename() {
        return this.middlename;
    }

    public void setMiddlename(String middlename) {
        this.middlename = middlename;
    }

    public Set<Ticket> getTickets() {
        return this.tickets;
    }

    public void setTickets(Set<Ticket> tickets) {
        this.tickets = tickets;
    }

    public Set<Organization> getOrganizations() {
        return this.organizations;
    }

    public void setOrganizations(Set<Organization> organizations) {
        this.organizations = organizations;
    }

}

public class UserType implements Java.io.Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -206438165274679246L;
    private long userTypeCode;
    private String userTypeName;
    private Set<User> users = new HashSet<User>(0);

    public UserType() {
    }

    public UserType(long userTypeCode, String userTypeName) {
        this.userTypeCode = userTypeCode;
        this.userTypeName = userTypeName;
    }

    public UserType(long userTypeCode, String userTypeName, Set<User> users) {
        this.userTypeCode = userTypeCode;
        this.userTypeName = userTypeName;
        this.users = users;
    }

    public long getUserTypeCode() {
        return this.userTypeCode;
    }

    public void setUserTypeCode(long userTypeCode) {
        this.userTypeCode = userTypeCode;
    }

    public String getUserTypeName() {
        return this.userTypeName;
    }

    public void setUserTypeName(String userTypeName) {
        this.userTypeName = userTypeName;
    }

    public Set<User> getUsers() {
        return this.users;
    }

    public void setUsers(Set<User> users) {
        this.users = users;
    }

}

вот сопоставления

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Mar 16, 2014 10:31:53 AM by Hibernate Tools 4.0.0 -->
<hibernate-mapping>
    <class name="com.digitalticket.model.User" table="&quot;USER&quot;">
        <id name="userId" type="long">
            <column name="USER_ID" precision="10" scale="0" />
            <generator class="assigned" />
        </id>
        <many-to-one class="com.digitalticket.model.UserType"
            fetch="select" name="userType">
            <column name="USER_TYPE" precision="10" scale="0" />
        </many-to-one>
        <property generated="never" lazy="false" name="email" type="string">
            <column length="20" name="EMAIL" not-null="true" unique="true" />
        </property>
        <property generated="never" lazy="false" name="password"
            type="string">
            <column length="32" name="PASSWORD" not-null="true" />
        </property>
        <property generated="never" lazy="false" name="name" type="string">
            <column length="64" name="NAME" not-null="true" />
        </property>
        <property generated="never" lazy="false" name="surname" type="string">
            <column length="64" name="SURNAME" not-null="true" />
        </property>
        <property generated="never" lazy="false" name="middlename"
            type="string">
            <column length="64" name="MIDDLENAME" />
        </property>
        <set fetch="select" inverse="true" lazy="true" name="tickets"
            sort="unsorted" table="TICKET">
            <key>
                <column name="USER" precision="10" scale="0" />
            </key>
            <one-to-many class="com.digitalticket.model.Ticket" />
        </set>
        <set fetch="select" lazy="true" name="organizations" sort="unsorted"
            table="AUDITOR">
            <key>
                <column name="USER" not-null="true" precision="9" scale="0" />
            </key>
            <many-to-many entity-name="com.digitalticket.model.Organization"
                unique="false">
                <column name="ORGANIZATION" not-null="true" precision="10"
                    scale="0" />
            </many-to-many>
        </set>
    </class>
</hibernate-mapping>

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Mar 16, 2014 10:31:53 AM by Hibernate Tools 4.0.0 -->
<hibernate-mapping>
    <class name="com.digitalticket.model.UserType" table="USER_TYPE">
        <id name="userTypeCode" type="long">
            <column name="USER_TYPE_CODE" precision="10" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="userTypeName" type="string">
            <column name="USER_TYPE_NAME" length="40" not-null="true" unique="true" />
        </property>
        <set name="users" table="USER" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="USER_TYPE" precision="10" scale="0" />
            </key>
            <one-to-many class="com.digitalticket.model.User" />
        </set>
    </class>
</hibernate-mapping>

Я использую сервер Oracle Weblogic 12c

29
Sergey Pekar

Исправлено путем изменения зависимости в моем pom.xml на более старую версию 4.3.4.Final Ошибка была в 4.3.4. Окончательная версия изменена на 4.2.7.Final

Не думаю, что это лучшее решение, но я не нашел никакого другого .

8
Sergey Pekar

Я использую с hibernate 4.3.5.Final и у меня похожая проблема с javassist, проблема в том, что javassist отсутствует, и вы можете получить последнюю версию из репозитория Maven.

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.18.1-GA</version> 
</dependency>

В более поздних выпусках это исправлено снова

С этим все работает в моем случае, 

24
anquegi

В моем случае проблема заключалась в том, что в пути к классам было две библиотеки javassist. Один из org.hibernate и другой из org.Apache.struts.xwork. Решено удалением последнего.

17
rand0m86

Вроде анкеги уже прокомментировал. У вас конфликт с библиотекой. Возвращение в спящий режим до 4.2.7. Финал не разрешит ваш конфликт с библиотекой . Запустите mvn dependency:tree -Dverbose и посмотрите на разные версии javassist. В моем случае мне нужно исключить javassist из зависимостей Hibernate.

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>${hibernate.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>${hibernate.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Это может помочь другим в будущем.

11
Paulo Jr

Хотя это только частично относится к вашему вопросу, я хотел опубликовать это где-нибудь, чтобы помочь всем, кто может столкнуться с этой проблемой при использовании SpringMVC, Hibernate и Apache Tiles.

Я получал это исключение, когда у меня в списке зависимостей были плитки-дополнения org.Apache.tiles. Для Tiles-extras и hibernate-core в качестве зависимости указаны разные версии javassist. Добавив следующее в мой файл pom.xml, я смог исправить ошибку.

<dependency>
    <groupId>org.Apache.tiles</groupId>
    <artifactId>tiles-extras</artifactId>
    <version>3.0.5</version>
    <exclusions>
        <exclusion>
            <artifactId>javassist</artifactId>
            <groupId>jboss</groupId>
        </exclusion>
    </exclusions>
</dependency>
10
Peter Kirby

Похоже, что сам Weblogic содержит javaassist старше, чем ваше приложение. Это можно исправить в дескрипторе приложения, weblogic.xml или weblogic-application.xml. Просто добавь 

<prefer-application-packages>
    <package-name>javassist</package-name>        
</prefer-application-packages>

в корневой элемент конфигурации.

Кстати, вы можете проверить такие конфликты с помощью инструмента анализа Weblogic Classloader - к нему можно обратиться по контекстному пути/wls-cat вашего сервера.

10
Volodymyr Shynkliar

У меня была похожая проблема на JBoss EAP 7.1.3 (EAP 6.0.1) для hibernate 4.2.x. Это потому, что модули JBoss уже содержат библиотеку javassist.

Я решил это, создав jboss-deploy-structure.xml в каталоге WEB-INF с таким содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
    <exclusions>
      <module name="org.javassist"/>
    </exclusions>
    <local-last value="true" />
  </deployment>
</jboss-deployment-structure>
5
rgrebski

Я использую 4.2.8-финальную версию hibernate, и у меня возникла эта проблема, и я рассмотрел приведенные ниже ответы/предложения ранее. Вот последовательность событий, которые я сделал. Чтобы избавиться от проблемы с 4.2.8-Final, в Websphere использовался подход загрузчика классов «последний класс - последний класс». Недавно, когда проект увеличился в размере (благодаря большему количеству связанных с hibernate ароматов jar), начал возникать та же проблема.

Наконец-то исключили «явассиста» из спящего

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
<exclusions>
    <exclusion>
        <groupId>org.javassist</groupId>
        <artifactId>javassist</artifactId>
    </exclusion>
</exclusions>

и добавил 

<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.1-GA</version> 

Даже это не решило проблему полностью (тем не менее, мне пришлось использовать подход загрузчика классов «родительский последний» с hibernate, чтобы избавиться от проблемы.

Наконец, я понизил версию hibernate с 4.2.8-Final до 4.2.7-Final, и проблема была решена (мне больше не нужно менять предпочтения загрузчика классов в консоли администратора websphere как родительские).

Не совсем уверен, что изменение в 4.2.8 Hibernate вызывает эту проблему. Любопытно узнать.

3
Kisanagaram

Решена проблема для приложения spring-hibernate-jpa на основе weblogic. Исключение приведения класса происходит из-за конфликтующих JAR-файлов сервера веб-логики и Javassist. Добавьте версию javassist-3.18.0-ga.jar или выше в путь к классу, а затем добавьте строки кода ниже в файл weblogic-application.xml, и это должно решить вашу проблему.

<wls:prefer-application-packages>
        <wls:package-name>javassist.*</wls:package-name>
  </wls:prefer-application-packages>
2
shailesh Totale

У меня была такая же проблема с Spring Data JPA. Я подтверждаю, что это происходит из-за конфликта с явасистами. .___. Решение:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <scope>compile</scope>
    <exclusions>
        <exclusion>
            <artifactId>javassist</artifactId>
            <groupId>org.javassist</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.18.2-GA</version>
    <scope>compile</scope>
</dependency>
0
rasolog

У меня была такая же проблема при использовании заголовков hibernate +. Решено путем исключения javassist из плитки-дополнений:

<dependency>
  <groupId>org.Apache.tiles</groupId>
  <artifactId>tiles-extras</artifactId>
  <version>3.0.5</version>
  <exclusions>
    <exclusion>
      <groupId>jboss</groupId>
      <artifactId>javassist</artifactId>
    </exclusion>
  </exclusions>
</dependency>
0
Weidong Fang

Если вы развертываете свое приложение на основе гибернации на сервере weblogic или аналогичном, вы будете иметь более раннюю версию javassist jar, доступную в папке модулей сервера. Это может привести к конфликту, о котором говорилось в предыдущих ответах, в результате чего в пути к классу может оказаться несколько банок. 

специально для weblogic добавить следующее в ваш weblogic-application.xml

добавьте имя_пакета javaassist. *, чтобы убедиться, что последнее выбрано. 

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application
   xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/javaee_5.xsd http://www.bea.com/ns/weblogic/weblogic-application http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd">

   <wls:ejb>
      <wls:start-mdbs-with-application>false
      </wls:start-mdbs-with-application>
   </wls:ejb>

   <wls:prefer-application-packages>
      <wls:package-name>antlr.*</wls:package-name>
      <wls:package-name>org.Apache.commons.*</wls:package-name>
      <wls:package-name>org.Apache.xmlbeans.*</wls:package-name>
      <wls:package-name>org.springframework.*</wls:package-name>
      <wls:package-name>org.hibernate.*</wls:package-name>
      <wls:package-name>org.joda.*</wls:package-name>
      <wls:package-name>javax.persistence.*</wls:package-name>
      <wls:package-name>com.google.*</wls:package-name>
      <wls:package-name>com.ibm.icu.*</wls:package-name>
      <wls:package-name>org.Apache.axiom.*</wls:package-name>
      <wls:package-name>javassist.*</wls:package-name>
   </wls:prefer-application-packages>
</wls:weblogic-application>
0
Amit Agarwal

У меня была похожая проблема с javassist. Я использую следующие зависимости в файле pom.xml -

<org.hibernate.version>4.2.15.Final</org.hibernate.version>
<org.pentaho.di>6.0.1.0-386</org.pentaho.di>


<dependency>
            <groupId>pentaho-kettle</groupId>
            <artifactId>kettle-core</artifactId>
            <version>${org.pentaho.di}</version>
            <exclusions>
                <exclusion>
                    <artifactId>xercesImpl</artifactId>
                    <groupId>xerces</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>javassist</artifactId>
                    <groupId>javassist</groupId>
                </exclusion>
            </exclusions>
        </dependency>



    <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>${org.hibernate.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>ehcache-core</artifactId>
                    <groupId>net.sf.ehcache</groupId>
                </exclusion>
            </exclusions>
        </dependency>

+- org.hibernate:hibernate-ehcache:jar:4.2.15.Final:compile
[INFO] |  +- org.jboss.logging:jboss-logging:jar:3.1.0.GA:compile
[INFO] |  \- org.hibernate:hibernate-core:jar:4.2.15.Final:compile
[INFO] |     +- antlr:antlr:jar:2.7.7:compile
[INFO] |     +- (org.jboss.logging:jboss-logging:jar:3.1.0.GA:compile - omitted for duplicate)
[INFO] |     +- (dom4j:dom4j:jar:1.6.1:compile - omitted for duplicate)
[INFO] |     +- org.javassist:javassist:jar:3.18.1-GA:compile

Hibernate содержит соответствующую версию, следовательно, удалив ее из ядра Pentaho Я нашел дерево зависимостей, используя-

mvn dependency:tree -Dverbose >> C:\pipeout2.txt
0
user471450

Проверьте свой тип возврата T или List<T>of результатов

0
Wundwin Born