Comment puis-je résoudre “org.mise en veille prolongée.HibernateException: createCriteria n'est pas valide sans transaction active” exception?

Je suis en utilisant Hibernate 4.0.1.Finale pour écrire une application Java autonome. Lors de l'essai de ma couche d'accès aux données, je suis l'exception suivante

org.mise en veille prolongée.HibernateException: createCriteria n'est pas valable sans
transaction active

lors de la recherche d'un objet. Je suis en train de séparer ma transaction au niveau du code à partir de ma base de données de code opérationnel. Mon test Unitaire est

@Before
public void setUpDAOTest() { 
    final Configuration configuration = new Configuration();
    configuration.configure().setProperty("hibernate.show_sql", "false");
    final ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    orgDao = new OrganizationDAOImpl(sessionFactory);
    session = sessionFactory.openSession();
    tx = session.beginTransaction();
}   //setUp

@Test
public void testFindStateByAbbrev() { 
    final String abbrev = testProps.getProperty("test.state.abbrev");
    final State state = orgDao.findStateByAbbrev(abbrev);
    Assert.assertNotNull(state);
    Assert.assertEquals(testProps.getProperty("test.state.abbrev"), state.getAbbrev());
}   //testFindStateByAbbrev

et le code de l'unité de test invoque est ...

public class OrganizationDAOImpl extends AbstractDAO implements OrganizationDAO {
    
    public State findStateByAbbrev(final String abbrev) {
        State ret = null;
        final Session session = sessionFactory.getCurrentSession();
        final Criteria crit = session.createCriteria(State.class).add(Restrictions.eq("abbrev", abbrev));
        final List<State> results = crit.list();
        if (results != null && results.size() > 0) {
            ret = results.get(0);
        }   //if
        return ret;
    }

L'exception est levée dans le DAO à la ligne,

final Criteria crit = session.createCriteria(State.class).add(Restrictions.eq("abbrev", abbrev));

Comment puis-je régler mon test JUnit (ou mon code DAO) pour éliminer cette exception et de faire mon code fonctionne correctement? Voici mon hibernate.cfg.xml fichier ...

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/dbid</property>
        <property name="hibernate.connection.username">user</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.connection.pool_size">10</property>
        <property name="show_sql">true</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
            <property name="current_session_context_class">thread</property>

        <mapping class="org.myco.myproject.orgsclient.model.Organization" />
        <mapping class="org.myco.myproject.orgsclient.model.State" />

    </session-factory>
</hibernate-configuration>
InformationsquelleAutor Dave | 2012-06-21