Comment créer une SessionFactory à l'aide de la configuration java? Cela ne marche pas pour une raison quelconque ... il renvoie toujours la valeur null.Spring Hibernate SessionFactory
Répondre
À noter ici que Spring 3.1 introduit LocalSessionFactoryBuilder, qui est expressément conçu pour être utilisé dans les méthodes @Bean.
Ce contourne la nécessité difficile à traiter FactoryBeans, les méthodes getObject(), etc. FactoryBeans sont excellents pour une utilisation en XML, mais non idéal dans les méthodes @Bean. Notez que ce nouveau générateur est uniquement Hibernate 4.1+.
à la place usine de retour:
@Bean
public AbstractSessionFactoryBean sessionFactoryBean(){
AnnotationSessionFactoryBean sessionFactoryBean = new AnnotationSessionFactoryBean();
sessionFactoryBean.setConfigLocation(new ClassPathResource("hibernate.cfg.xml"));
return sessionFactoryBean;
}
Si vous avez besoin d'injecter SessionFactory
directement quelque part dans le code, ajoutez cette méthode d'assistance:
public SessionFactory sessionFactory() {
return sessionFactoryBean().getObject();
}
Notez que l'aide sessionFactory()
est pas annotée avec @Bean
- C'est vraiment important.
Tomasz est juste, mais je ne crois que la création d'instance d'objet à l'aide « nouvelle » n'a pas les pieds avec le concept de printemps:
Je pense que vous devez le faire de cette façon:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>com.vanilla.objects.Student</value>
<value>com.vanilla.objects.Address</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
puis vous pouvez l'utiliser dans votre grain de printemps:
@Autowired
SessionFactory sessionFactory;
puis à l'intérieur de votre méthode:
Session session = sessionFactory.getCurrentSession();
Il utilise [configuration de conteneur basée sur Java] (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-java) , qui est la nouvelle fonctionnalité de Spring 3.0.x. Le code d'OP est complètement fin et idiomatique (sauf le problème auquel il fait face, bien sûr). –
Vous devez appeler afterPropertiesSet() sur l'usine de la session après avoir réglé toutes les propriétés
Donc, dans votre exemple, il ressemblerait à ceci:
@Bean
public SessionFactory sessionFactory(){
AnnotationSessionFactoryBean sessionFactoryBean = new AnnotationSessionFactoryBean();
sessionFactoryBean.setConfigLocation(new ClassPathResource("hibernate.cfg.xml"));
sessionFactoryBean.afterPropertiesSet();
return sessionFactoryBean.getObject();
}
Étant donné que les réponses ci-dessus sont pas à jour, voici un plus moderne approche:
@Bean
public SessionFactory sessionFactory(HibernateEntityManagerFactory hemf){
return hemf.getSessionFactory();
}
En outre, si vous avez un EntityManager
injecté, vous pouvez obtenir la session en cours via
Session session = entityManager.unwrap(Session.class);
- 1. Spring + Hibernate SessionFactory + AbstractRoutingDataSource
- 2. Hibernate ASM Spring java.lang.NoSuchMethodError sessionFactory
- 3. SessionFactory Hibernate
- 4. Hibernate SessionFactory
- 5. Hibernate SessionFactory
- 6. Hibernate DAO/SessionFactory Utilisation
- 7. Annotations Hibernate avec DataSource en sessionFactory dans le projet Spring
- 8. Spring 3, Hibernate 4 AutoWired sessionFactory avec DAO générique
- 9. Spring + Hibernate, autowire sessionFactory en veille prolongée OAC
- 10. seul élément de base de données avec Spring Hibernate SessionFactory
- 11. Intercepteur Hibernate 4 SessionFactory
- 12. Spring AutoWired et SessionFactory
- 13. Spring + Hibernate + Spring
- 14. stocker Hibernate SessionFactory avec Struts
- 15. sessionFactory - Problème d'intégration du hibernate de printemps
- 16. Spring Autowiring + Hibernate Rechercher
- 17. Spring + hibernate paresseux fetching
- 18. Hibernate/Spring: Collections persistantes
- 19. hibernate, spring - transaction
- 20. Spring 3.1, Mise en veille prolongée 4, SessionFactory
- 21. Erreur de création sessionFactory
- 22. Hibernate Spring Transactions
- 23. Hibernate SessionFactory: comment configurer JNDI dans Tomcat?
- 24. Gestion de connexion Hibernate dans sessionfactory
- 25. une seule fois Hibernate sessionFactory création
- 26. liaison de paramètres statistiques Hibernate SessionFactory
- 27. Spring, Hibernate et .xml Erreur
- 28. java.lang.IllegalArgumentException: 'sessionFactory' ou 'hibernateTemplate' est requis au printemps + hibernate
- 29. Spring Hibernate JPA Vs Spring Hibernate
- 30. Configuration Spring and Hibernate
Cela a fonctionné pour moi mais j'étais confus où le haricot devait être placé. Pour les autres, si vous avez une classe qui contient une annotation avec '@Configuration', je mettrais la méthode '@Bean' dedans. Chargé aucun problème et j'étais prêt à partir. –
AbstractSessionFactoryBean est obsolète – Blauhirn