2012-05-08 12 views
1

私はHibernateを使って非常に単純なクラスを永続化しようとしています。私はではなく、を使用しています。私はではありません。は、のプレーンアノテーションです。 I であり、org.hibernate.Entityの代わりにjavax.persistence.Entityを使用しています。それでも、JUnitテスト(クラスとは別のパッケージに入っています)を実行すると、testAddUser caused an ERROR: Unknown entity: restauracja.PersonalInfoになります。JUnitテスト、Hibernate、Unknownエンティティエラー

私は間違っていますか?

UPDATE:これは私が私のセッションファクトリを初期化する方法である:

private final static SessionFactory factory; 
static { 
    Configuration cfg = new AnnotationConfiguration().configure("hibernate.cfg.xml"); 
    factory = cfg.buildSessionFactory(); 
} 

、テストを実行する:

@Test 
public void testAddUser() { 
    Session session = factory.openSession(); 
    Transaction tx = session.beginTransaction(); 

    PersonalInfo pi = new PersonalInfo("Jan", "Kowalski", "Krótka 6a", "Gniezno", 123456l); 

    session.saveOrUpdate(pi); 
    tx.commit(); 
    session.close(); 

} 
+0

を設定してテストランチャーで使用する方法を示します。 – yair

+0

ここにいくつかのコードを追加しました。 – IneQuation

答えて

4

Hibernateは通常、それは知っていて、調査したクラスのコレクションを持っていますアノテーションのために。私はそのコレクションにあなたのrestauracja.PersonalInfoクラスを追加する必要があると思う。

AnnotationConfiguration cfg = new AnnotationConfiguration(); 
for (Class<?> clazz : databaseConfig.getHibernateClasses()) { 
    cfg.addAnnotatedClass(clazz); 
} 

特定のユニットテストで使用されているの各クラスは、テストのためにhibernateニーズがそのリストになければならないのすべてのクラスを指定する必要があります。たとえば、私たちのテストハーネスでは、我々のような何かを行います。私はクラスのリストがおそらくhibernate.cfg.xmlファイルにあると思われ、そのリストに欠けているクラスを追加するだけでよいのです。

+0

サイドノート:AnnotationConfigurationは、Configurationを優先して廃止されました。 – Jeremy

+0

ええと、私の 'hibernate.cfg.xml'はダイアレクト(MySQL)設定(ユーザ、パス、データベース)のみを含んでいます。私はDBスキーマツールからNetBeansの自動クラス生成を使用しました。 – IneQuation

+1

@IneQuationセッションファクトリを作成する前に 'cfg.addAnnotatedClass(restauracja.PersonalInfo.class);を追加しようとしましたか? – Gray