2016-12-13 11 views
0

からエンティティマッピングを読み取らないセッションファクトリは、これが私のhibernate.cfgです:Hibernateは:hibernate.cfg.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory> 
    <!-- Connessione al database -->   
    <property name="connection.driver_class"> 
    oracle.jdbc.driver.OracleDriver 
    </property> 
    <property name="connection.url"> 
    jdbc:oracle:thin:@localhost:1521:xe 
    </property> 

    <!-- Credenziali --> 
    <property name="hibernate.connection.username">Test</property> 
    <property name="connection.password">Test</property> 
    <!-- JDBC connection pool (use the built-in) --> 
    <property name="connection.pool_size">1</property> 

    <!-- SQL dialect --> 
    <property name="dialect"> 
    org.hibernate.dialect.Oracle10gDialect</property> 

    <!-- DISABILITA AUTO COMMIT --> 
    <property name="hibernate.connection.autocommit">true</property> 

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

    <!-- Disable the second-level cache --> 
    <property name="cache.provider_class"> 
    org.hibernate.cache.NoCacheProvider</property> 

    <property name="show_sql">true</property> 
    <property name="hibernate.hbm2ddl.auto">validate</property> 

    <!-- Entity --> 
    <mapping class= "it.test.Tbl1"></mapping> 
    <mapping class= "it.test.Tbl2"></mapping> 
    <mapping class= "it.test.Tbl3"></mapping> 
    <mapping class= "it.test.Tbl4"></mapping> 
</session-factory> 
</hibernate-configuration> 

と、この休止utilのファイル:

私が実行しようとします単純なクエリ、私は例外を持って - > "クエリの例外:テーブルがマップされていない"。 しかし、私は、次のようにUTIL休止状態を変更した場合

public class HibernateUtil { 

     private static SessionFactory sessionFactory; 
     private static ServiceRegistry serviceRegistry; 

     private static SessionFactory createSessionFactory() { 
      Configuration configuration = new Configuration(); 
      configuration.configure(); 
      serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); 
      sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
      return sessionFactory; 
     } 

     public static SessionFactory getSessionFactory() { 
      if (sessionFactory == null) 
       sessionFactory = createSessionFactory(); 
      return sessionFactory; 
     } 
    } 

プログラムは成功で動作します。 セッションファクトリがコンフィグレーションファイルでロードされないのはなぜですか?

コンソールログ:

10:54:44.989 [main] DEBUG org.hibernate.hql.internal.ast.ErrorCounte-  
throwQueryException() : no errors 
10:54:45.130 [main] DEBUG 
org.hibernate.hql.internal.antlr.HqlSqlBaseWalker - select << begin 
[level=1, statement=select] 

org.hibernate.hql.internal.ast.QuerySyntaxException: Tbl1 is not mapped 
[from Tbl1 eat where eat.activityId = :id] 
at 
org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException 
(QuerySyntaxException.java:79) 
at org.hibernate.QueryException.wrapWithQueryString 
(QueryException.java:103) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile 
(QueryTranslatorImpl.java:218) 

私はこの問題は、このあると思う:

17:14:47.130 [main] DEBUG org.hibernate.internal.SessionFactoryRegistry - 
Registering SessionFactory: a0044811-5a9f-483a-8ede-b136c9781bb3 
(<unnamed>) 
17:14:47.130 [main] DEBUG org.hibernate.internal.SessionFactoryRegistry - 
Not binding SessionFactory to JNDI, no JNDI name configured 
17:14:47.364 [main] DEBUG org.hibernate.stat.internal.StatisticsInitiator 
- Statistics initialized [enabled=false] 

あなたは私を助けることができます?

答えて

0

addAnnotatedClassの方法を使用している間に、編集し削除したコードに記載されているようにTbl1, Tbl2, Tbl3 (2 times)がコード化されました。 .addAnnotatedClass(Tbl1.class).addAnnotatedClass(Tbl2.class).addAnnotatedClass(Tbl3.class).addAnnotatedClass(Tbl3.class)

xml設定を使用しているときに、4つの注釈付きクラスがあると言っています。

<mapping class= "it.test.Tbl1"></mapping> 
<mapping class= "it.test.Tbl2"></mapping> 
<mapping class= "it.test.Tbl3"></mapping> 
<mapping class= "it.test.Tbl4"></mapping> 

を述べたようにTbl4.classのマッピングが存在するかしないか、または.addAnnotatedClass(Tbl4.class)に最後addAnnotatedClass(Tbl3.class)を変更しようとするかどうかを確認してください。

+0

: "sessionFactory = configuration.addAnnotatedClass(Tbl1.class).addAnnotatedClass(Tbl2.class).addAnnotatedClass(Tbl3.class).addAnnotatedClass(Tbl4.class).buildSessionFactory(serviceRegistry);を追加するとプログラムがうまく動作します。 " しかし、私は、セッションファクトリがhibernate.cfg.xmlからマッピングクラスを読み込むことを望みます。私は、paserがhibernate.cfg.xmlのタグマッピングを読み込んでいないと思います。 – fegrieco

+0

'hibernate.connection.username'の代わりに' connection.username'を試してみてください。 – SachinSarawgi

+0

また、あなたの 'hibernate.cfg.xml'ファイルには閉じタグ' 'がありません – SachinSarawgi

0

おそらく、構成ファイル(xmlファイル)を使用してロードする場合、.hbmファイルがありません。各テーブルにhbmファイルを追加してみてください。

+0

ファイルhbmは、(@Entity、@Column、など)注釈を使用する場合にも必要ですか? – fegrieco

+0

いいえ、xmlファイル構成の場合のみ必要です。アノテーションの場合、Javaのクラスとdbのテーブルは@Entityアノテーションを使用してマップされます。 – KayV

0

hibernate.cfg.xmlファイルがありません。あなたのcfgファイル名がhibernate.cfg.xmlと異なる場合、Configuration configuration = new Configuration(); configuration.configure("filename.cfg.xml");を設定する必要があります。デフォルトでは、hibernateはconfiguration.configure();に設定せずにhibernate.cfg.xmlファイルを使用しますが、cfgファイル名が異なる場合、configure()に入れる必要があります。あなたのファイルはsrcフォルダに配置する必要があります。別の場所に配置する場合は、正しいパスで渡す必要があります。

+0

いいえ、hibernate.cfg.xmlファイルが見つかりました。接続のプロパティは読み込まれますが、タグは無視されます。 – fegrieco

関連する問題