Java: гибернация в веб-приложении - невозможно создать экземпляр tuplizer по умолчанию [org.hibernate.tuple.entity.PojoEntityTuplizer] - PullRequest
0 голосов
/ 22 марта 2012

У меня странная проблема с Hibernate в веб-приложении, хотя я не сталкиваюсь с этим в тестовом автономном приложении.

лица-config.xml

    <managed-bean>
        <managed-bean-name>businessUserData</managed-bean-name>
        <managed-bean-class>org.beans.BusinessUserDataHibernate</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>daoUserData</property-name>
            <value>#{daoUserData}</value>
        </managed-property> 
    </managed-bean>     
    <managed-bean>
        <managed-bean-name>daoUserData</managed-bean-name>
        <managed-bean-class>org.data.source.DAOuserDataHibernate</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

DAOuserDataHibernate.getUserData () - который я использую в качестве класса обслуживания в классе BusinessUserDataHibernate

     public UserData getUserData(String userName){
        sessionFactory = new Configuration().configure().buildSessionFactory();     
        UserData userData=null;
        try{
            session = sessionFactory.openSession();
            tx = session.beginTransaction();
            userData = (UserData)session.get(UserData.class, userName);
            tx.commit();            
                    session.close();
            return userData;
        }
        catch(HibernateException hEx){ return null; }                           
    }

hibernate.cfg.xml

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/mySQLdb</property>
        <property name="connection.username">...</property>
        <property name="connection.password">...</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>

        <mapping resource="UserData.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

UserData.hbm.xml

<hibernate-mapping package="org.hibernate">

    <class name="UserData" table="UserData">
        <id name="userId" column="id" type="string"/>
        <property name="xmlData" type="clob"/>
    </class>

</hibernate-mapping>

Мои импортированные банки

http://i.stack.imgur.com/BiCMk.jpg

Когда я запускаю приложение из автономного тестового приложения, оно работает нормально (hibernate выбирает данные или записывает в БД в зависимости от метода DAO, который я вызываю). Когда я развертываю его в WAR и запускаю на Glasfish3 сервере, он сбрасывает

Трассировка стека

Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:110)
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:135)
    at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:323)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:433)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109)
    at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:231)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1313)
    at org.data.source.DAOuserHibernate.getAllUsers(DAOuserHibernate.java:61)
    at org.spring.beans.BusinessUserHibernate.getAllUsers(BusinessUserHibernate.java:33)

Я пробовал разные способы, в том числе с поддержкой Spring, но в итоге я оказался в этом исключении. Кажется, это как-то связано с созданием sessionFactory . Не могли бы вы помочь мне в этом вопросе.

Заранее спасибо Marcin

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Это, вероятно, не ваш случай, но Hibernate выдает это исключение при использовании Java 11 вместо ожидаемой Java 8

0 голосов
/ 13 апреля 2012

У меня возникла та же проблема, но она была решена после добавления javassist.jar.Я использовал Maven для управления зависимостями.Я добавил вот так

<dependency>
    <groupId>javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.12.1.GA</version>
</dependency>

Просьба проверить попробуйте изменить версию Javssist

...