it-swarm-pt.tech

Primavera 3.1, Hibernate 4, SessionFactory

Isso estava funcionando:

<bean id="sessionFactory"  
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
...

mas a atualização para as versões mencionadas o interrompe. Qual é o método correto para criar um SessionFactory bean com Spring 3.1.Release e Hibernação 4.0.0.FINAL ?

O erro na implantação é:

exceção aninhada é Java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider;


[~ # ~] editar [~ # ~]
Adicionei minha própria resposta, que a corrigiu para mim.

42
NimChimpsky

Eu acho que você deveria usar org.springframework.orm.hibernate4.LocalSessionFactoryBean ao invés de org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

De LocalSessionFactoryBean javadoc:

NOTA: Essa variante do LocalSessionFactoryBean requer o Hibernate 4.0 ou superior. É semelhante em função à classe com o mesmo nome no pacote orm.hibernate3. No entanto, na prática, ele está mais próximo do AnnotationSessionFactoryBean, pois seu principal objetivo é bootstrap um SessionFactory a partir da varredura de anotação.

92
qnox

O Hibernate 4 removeu as interfaces e classes obsoletas relacionadas a CacheProvider em favor da interface de cache relacionada a RegionFactory lançada anteriormente. Você pode encontrar o resumo do pacote de cache da versão 4 aqui , o resumo do pacote de cache da versão 3.2 aqui (logo antes da interface RegionFactory ter sido adicionada) e a versão 3.3 resumo do pacote de cache aqui (quando RegionFactory foi lançado pela primeira vez).

Além do JavaDoc, você pode encontrar a seguinte documentação útil:

No entanto, com base no Spring 3.1 dependências O Spring 3.1 não requer o Hibernate 4 (no diretório Full Dependencies seção, JBoss Hibernate Object-Relational Mapper está na versão 3.3.2.GA). Se você deseja atualizar para o Hibernate 4, precisará atualizar suas configurações de cache. Caso contrário, tente usar a versão Hibernate 3.3.2 ou superior 3.X.

[~ # ~] update [~ # ~] : Lembre-se de que a documentação do Hibernate 4 no Spring 3.1 é escassa no momento. O Spring Framework Reference Documentation possui apenas o seguinte para Suporte para Hibernate 4.x :

See Javadoc for classes within the new org.springframework.orm.hibernate4 package

O Spring 3.1 apresenta o LocalSessionFactoryBuilder , que estende o Configuration do Hibernate.

Parece que você deve ficar de olho em algumas outras alterações se quiser usar o Hibernate 4.

ATUALIZAÇÃO 2 : Acabei de notar que esta pergunta é uma duplicata aproximada de Exceção NoClassDefFoundError for CacheProvider .

15
Dan Cruz

Use esta configuração

arquivo de configuração de hibernação:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

POM:

    <!-- CGLIB -->
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>${cglib-version}</version>
        <scope>runtime</scope>
    </dependency>

    <!-- Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${org.hibernate-version}</version>
        <!-- will come with Hibernate core -->
    </dependency>

    <!-- Spring -->
   <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>

eu esqueci de incluir as versões, estou usando a versão do hibernate: 4.1.2.Final e a versão da primavera: 3.1.1.RELEASE, há uma atualização do hibernate 4.1.3.Final, não testada, mas acredito que funcione bem.

8
Defrag

Eu tive que mudar algumas coisas, aqui vamos nós:

No meu gerenciador de transações, a configuração mudou 3 -> 4:

org.springframework.orm.hibernate4.HibernateTransactionManager;

E minha sessionFactory para isso (obrigado @toxin):

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
5
NimChimpsky
  • No caso do Hibernate 4.0 ou superior, a partir do Spring 4.0, você deve usar
org.springframework.orm.hibernate4.LocalSessionFactoryBean

Por exemplo:

<bean id="sessionFactory" 
      class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    ...
</bean>

Consulte http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate4/LocalSessionFactoryBean.html

  • No caso do Hibernate 5.0/5.1/5.2, a partir do Spring 4.3, é melhor usar
org.springframework.orm.hibernate5.LocalSessionFactoryBean

(Consulte http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate5/LocalSessionFactoryBean.html )

0
Yuci