1

Hibernate 4.2.6 および Spring 3.1.1 の使用

これに似たクラスが1つあります

@Entity
@Table( name = "MY_TABLE" )
public class MyTable{ ... }

次に、 hibernate.cfg.xml ファイルに次のものがあります

<mapping class="com.mycompany.myapp.persistence.domain.MyTable"/>

セッションを取得してテーブルをクエリする JUnit テストを実行すると、次のエラーが発生します。

Initial SessionFactory creation failed.org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="com.mycompany.myapp.persistence.domain.MyTable"/>

私が読んだ内容に基づいて、AnnotationConfiguration が非推奨になり、機能が Configuration に移動した理由がわかりません。

セッションを取得するために、私はこれをやっています

Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();

しかし、セッションを取得できず、このエラーがスローされます。

4

1 に答える 1

2

現在は稼働しているようです。解決策は 2 つあります。

まず、このコードは正しいです:

a) マッピング クラスは hibernate.cfg.xml に残ります

b) HibernateUtil クラスを作成する

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            Configuration configuration = new Configuration();
            configuration.configure();
            ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
            return configuration.buildSessionFactory(serviceRegistry);
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

c) Model クラスを作成する

d) 次に、テストで、このように setup() で sessionFactory をインスタンス化します

sessionFactory = HibernateUtil.getSessionFactory();

e)次に、このようにデータベースにクエリを実行します

Session session = sessionFactory.openSession();
session.beginTransaction();
List<TableName> result = session.createQuery("from table").list();
session.getTransaction().commit();
session.close();

次に、この AnnotatedConfiguration クラスが非推奨になる前に、Hibernate 3.4.2 を使用していたターゲット ランタイムとして JBoss 4.2 を使用していました。JBoss をランタイムとしてターゲットにしないと、Hibernate 4.2.6 (Maven 経由でインポート) が使用され、このエラーは発生しません。セットアップ時に Hibernate がそのバージョンを出力するので、もっと注意を払うべきでした! :-)

于 2013-09-27T03:18:05.860 に答える