2014-06-05 3 views
0

자바 웹 앱에서 Hibernate를 사용하는 법을 배우고 있습니다. 나는 다음과 같은 sessionFactory에 내있는 hibernate.cfg.xml 파일의 위치에 대한 구성을 시작,하지만 여전히 불만 : resources/hibernate.cfg.xml not foundresources/hibernate.cfg.xml을 찾을 수 없음

은 "자원"폴더가 자바 프로젝트 내 "SRC"폴더의 하위 디렉토리입니다 .

public class HibernateUtil 
{ 
    private static final SessionFactory sessionFactory = new Configuration().configure("resources/hibernate.cfg.xml").buildSessionFactory(); 

    public static void main(String[] args) 
    { 
     Session session = sessionFactory.getCurrentSession(); 
     Transaction tx = session.beginTransaction(); 

     Book book1 = new Book("John Wright", "Unknown Title"); 
     session.save(book1); 
     tx.commit(); 

     System.out.println("Book committed: book title: " + book1.getTitle() + ", author is: " + book1.getAuthor()); 
     sessionFactory.close(); 
    } 


} 

다음과 같이 내 pom.xml 파일에서 내가 사용 최대 절전 모드 의존성이 있지만, 인 IntelliJ는 buildSessionFactory() 메서드를 강조하여 "취소 선"

<dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.3.5.Final</version> 
     </dependency> 

사용되지 않는 것을 경고 나는 맨 아래에있는 오류 메시지를 게시하고 있습니다. 무슨 일 이니? 감사

10:43:12.737 [main] INFO o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.4.Final} 
10:43:12.746 [main] INFO org.hibernate.Version - HHH000412: Hibernate Core {4.3.1.Final} 
10:43:12.747 [main] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found 
10:43:12.749 [main] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:259) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:116) 
Caused by: org.hibernate.HibernateException: resources/hibernate.cfg.xml not found 
    at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173) 
    at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2093) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2074) 
    at persistence.HibernateUtil.<clinit>(HibernateUtil.java:14) 
    ... 3 more 
10:43:12.763 [main] INFO org.hibernate.cfg.Configuration - HHH000043: Configuring from resource: resources/hibernate.cfg.xml 
10:43:12.763 [main] INFO org.hibernate.cfg.Configuration - HHH000040: Configuration resource: resources/hibernate.cfg.xml 

Process finished with exit code 1 
는 웹 애플리케이션이 시작 클래스 패스의 루트에 있지 않기 때문에 귀하의 최대 절전 모드 설정 파일을 찾을 수 없습니다
+1

hibernate.cfg.xml이 src/main/resources에 있는지 확인하십시오. Maven은 프로젝트 구조가 매우 독특합니다 ... – BlakeP

+0

아니요, src/resources이지만 src/main으로 리소스를 이동하더라도 동일한 오류가 계속 발생합니다 – TonyGW

+1

Maven을 최종 빌드에 포함 시키도록 설정 했습니까? 일반적으로 Maven은 모든 Java 파일과 src/main/resources에 src/main/java를 가지고 있습니다. 이 구조를 통해 Maven은 자동으로 모든 것이 어디에 있는지 알며, 모두 포함시켜야합니다. 또한, src/main/resources에 넣으면, ("resources/hibernate.cfg.xml") .configure ("hibernate.cfg.xml")로 지정하지 않는다. resources 폴더 아래에 있습니다. – BlakeP

답변

1

...

당신이있는 hibernate.cfg.xml을 가하고, 메이븐을 사용하는 src/main/resources 폴더에있는 파일은 WAR 파일의 WEB-INF/classes에 자동으로 복사되도록해야합니다. WAR 파일을 열고 hibernate.cfg.xml의 위치를 ​​확인하십시오.

hibernate.cfg.xml 파일이 WAR 파일에 없다면 ... POM의 maven-war-plugin 설정을 다시 확인하십시오.

4.3 documentation에 따라 사용 중단 경고와 관련하여 buildSessionFactory()가 사용되지 않으며 대신 buildSessionFactory (ServiceRegistry)를 사용해야합니다.

1

답장을 보내 주셔서 감사합니다.

마지막으로, 나는 그것을 알아 냈습니다. 아래는 나의 HibernateUtil 클래스 내 설정이다. Hibernate 4.3.5를 사용하고 있기 때문에, 나는 더 이상 사용되지 않는 메소드를 최신으로 대체했다. 또한 내 hibernate.cfg.xml을 src/main/java/resources으로 옮겼습니다.

static { 
     try { 
      Configuration configuration = new Configuration().configure("/resources/hibernate.cfg.xml"); 
      StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); 
      sessionFactory = configuration.buildSessionFactory(builder.build()); 
     } catch (HibernateException ex) { 
      System.err.println("Initial sessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    }