2016-12-13 3 views
0

에서 엔티티 매핑을 읽지 않습니다 세션 공장이 내 hibernate.cfg입니다 :최대 절전 모드 : 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(Tbl3.class) .addAnnotatedClass(Tbl4.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 파일 구성의 경우에만 필요합니다. annotaion의 경우, java의 클래스와 db의 테이블은 @Entity 주석을 사용하여 매핑됩니다. – KayV

0

나는 hibernate.cfg.xml 파일이 누락 된 것 같습니다. 만약 당신의 cfg 파일 이름이 hibernate.cfg.xml과 다르다면, Configuration configuration = new Configuration(); configuration.configure("filename.cfg.xml");을 구성 할 필요가 있습니다. 기본적으로 최대 절전 모드는 configuration.configure();으로 설정하지 않고 hibernate.cfg.xml 파일을 사용합니다. 그러나 cfg 파일 이름이 다른 경우 configure()에 넣어야합니다. 귀하의 파일은 src 폴더에 있어야합니다. 다른 장소에 놓으면 정확한 경로로 전달해야합니다.

+0

아니요, 연결 속성이 읽혀지기 때문에 hibernate.cfg.xml 파일이 발견되지만 태그 는 무시됩니다. – fegrieco

관련 문제