Hibernate gestionnaire de transactions configurations au Printemps

Dans mon projet j'utilise Hibernate avec programmatiques la démarcation des transactions.
À chaque fois, dans mon Service méthodes-je écrire quelque chose de semblable.

Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
.. perform operation here
session.getTransaction().commit();

Maintenant, je vais refactoriser mon code avec déclarative, la gestion des transactions. Ce que j'ai maintenant ...

  <context:component-scan base-package="package.*"/>

  <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    <property name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
  </bean>

  <tx:annotation-driven transaction-manager="txManager"/>


  <bean id="txManager"  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
         <ref local="mySessionFactory"/>
    </property>
  </bean>

Classe de Service:

@Service
public class TransactionalService {

    @Autowired
    private SessionFactory factory;

    @Transactional
    public User performSimpleOperation() {
        return (User)factory.getCurrentSession().load(User.class, 1L);
    }
}

Et simple test -

@Test
public void useDeclarativeDem() {
    FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext("spring-config.xml");
    TransactionalService b = (TransactionalService)ctx.getBean("transactionalService");
     User op = b.performSimpleOperation();
     op.getEmail();

Lorsque j'essaie d'obtenir l'email de l'utilisateur en dehors de la méthode, j'ai eu l'initialisation tardive exception, le courriel est mon cas, c'est une simple chaîne de caractères. Hibernate n'est pas à même d'effectuer des requêtes sql, jusqu'à ce que j'appelle toutes les getters sur mon POJO.

1) ce que je fais de mal ici ?

2) cette approche Est-elle valide ?

3) Pouvez-vous suggérer les opensources projet qui travaillent sur spring/hibernate annotations en fonction de la configuration ?

Mise à jour

Pour quelque raison que si je remplace getCurrentSession avec openSession ce code fonctionne très bien. Quelqu'un peut m'expliquer s'il vous plaît ?

Merci

L'e-Mail d'un Utilisateur dans une autre table?
simple chaîne de caractères dans le même tableau

OriginalL'auteur user12384512 | 2011-02-27