2016-03-01 104 views
2

我试图在ubuntu中用pgadmin3连接到Postgresql9.1。 我的Pgadmin3 GUI工具不提供通过右键单击数据库来创建表格的任何选项,但它在我看到的一些视频中可用。因此,我使用终端创建数据库,并在pgadmin3中显示。org.hibernate.internal.util.config.ConfigurationException:找不到cfg.xml资源[/HibernateTest/src/hibernate.cfg.xml]

my file structure

我的UserDetails文件

package org.nitish.hiber; 

import javax.persistence.Entity; 
import javax.persistence.Id; 

@Entity 
public class UserDetails { 
    @Id 
    private int userId; 
    private String userName; 
    public int getUserId() { 
     return userId; 
    } 
    public void setUserId(int userId) { 
     this.userId = userId; 
    } 
    public String getUserName() { 
     return userName; 
    } 
    public void setUserName(String userName) { 
     this.userName = userName; 
    } 
} 

我HibernateCaller文件

package org.nitish.caller; 

import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 
import org.nitish.hiber.UserDetails; 

public class HibernateTest { 

    public static void main(String[] args) { 
     UserDetails user = new UserDetails(); 
     user.setUserId(1); 
     user.setUserName("First User"); 
     try { 
      SessionFactory sessionFactory = new Configuration().configure("/HibernateTest/src/hibernate.cfg.xml").buildSessionFactory(); 
      Session session = sessionFactory.openSession(); 
      session.beginTransaction(); 
      session.save(user); 
      session.getTransaction().commit(); 

     } catch(HibernateException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

的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, Relational Persistence for Idiomatic Java 
    ~ 
    ~ License: GNU Lesser General Public License (LGPL), version 2.1 or later. 
    ~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. 
    --> 
<hibernate-configuration> 

    <session-factory> 
    <!-- Database connection settings --> 
    <property name="connection.driver_class">org.postgresql.Driver </property> 
    <property name="connection.url">jdbc:postgresql://localhost:5432/hiber</property> 
    <property name="connection.username">nitish</property> 
    <property name="connection.password"></property> 

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

    <!-- SQL dialect --> 
    <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</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.internal.NoCacheProvider</property> 

    <!-- Echo all executed SQL to stdout --> 
    <property name="show_sql">true</property> 

    <!-- Drop and re-create the database schema on startup --> 
    <property name="hbm2ddl.auto">create</property> 

    <mapping class="org.nitish.hiber.UserDetails"/> 
    </session-factory> 
</hibernate-configuration> 

我得到以下埃罗[R

Mar 1, 2016 9:02:48 AM org.hibernate.cfg.Environment <clinit> 
INFO: HHH000206: hibernate.properties not found 
Mar 1, 2016 9:02:48 AM org.hibernate.cfg.Environment buildBytecodeProvider 
INFO: HHH000021: Bytecode provider name : javassist 
org.hibernate.internal.util.config.ConfigurationException: Could not locate cfg.xml resource [/HibernateTest/src/hibernate.cfg.xml] 
    at org.hibernate.boot.cfgxml.internal.ConfigLoader.loadConfigXmlResource(ConfigLoader.java:53) 
    at org.hibernate.boot.registry.StandardServiceRegistryBuilder.configure(StandardServiceRegistryBuilder.java:163) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:259) 
    at org.nitish.caller.HibernateTest.main(HibernateTest.java:17) 

作出一些改变(不能用session.close()在finally块我觉得应该不会造成这个错误)

Mar 1, 2016 10:13:34 AM org.hibernate.Version logVersion 
INFO: HHH000412: Hibernate Core {5.1.0.Final} 
Mar 1, 2016 10:13:34 AM org.hibernate.cfg.Environment <clinit> 
INFO: HHH000206: hibernate.properties not found 
Mar 1, 2016 10:13:34 AM org.hibernate.cfg.Environment buildBytecodeProvider 
INFO: HHH000021: Bytecode provider name : javassist 
Mar 1, 2016 10:13:34 AM org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity 
WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-configuration. Use namespace http://www.hibernate.org/dtd/hibernate-configuration instead. Support for obsolete DTD/XSD namespaces may be removed at any time. 
Mar 1, 2016 10:13:35 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> 
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final} 
Mar 1, 2016 10:13:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure 
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!) 
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51) 
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189) 
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352) 
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111) 
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83) 
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418) 
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) 
    at org.nitish.caller.HibernateTest.main(HibernateTest.java:17) 
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.postgresql.Driver] 
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:229) 
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.loadDriverIfPossible(DriverManagerConnectionProviderImpl.java:161) 
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildCreator(DriverManagerConnectionProviderImpl.java:117) 
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:73) 
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189) 
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145) 
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66) 
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) 
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234) 
    ... 14 more 
Caused by: java.lang.ClassNotFoundException: Could not load requested class : org.postgresql.Driver 
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.java:217) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:323) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:268) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:274) 
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:226) 
    ... 25 more 
+0

hibernate.cfg.xml本身就在src文件夹中 – nitishpisal

回答

3

如果在您的hibernate.cfg.xml源文件夹的根目录,只是做

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 

如果是在包装,在org.nitish.caller一个例子,通过这种方式指定路径

SessionFactory sessionFactory = new Configuration() 
    .configure("/org/nitish/caller/hibernate.cfg.xml").buildSessionFactory(); 

您需要关闭session(在finally块中)。不要忘记添加rollback的代码。

请将@Table注释添加到UserDetails

更新

,Hibernate对无法找到org.postgresql.Driver类错误的原因。它驻留在postgresql jar中。你的图像上有那个jar,但可能是你没有将它添加到类路径中。请参阅How to Add JARs to Project Build Paths in Eclipse (Java)

要关闭finally块中的session块,您需要在try块之外具有session变量。

Session session = sessionFactory.openSession(); 

    try{ 

    } finally { 
     session.close(); 
    } 
+0

做出更改后几乎没有新的例外 – nitishpisal

+0

@nitishpisal将所有这些添加到问题中。 –

+0

完成...不能在finally块中添加session.close()尽管 – nitishpisal

0

new Configuration().configure()从类路径目录的根取hibernate.cfg.xmlnew Configuration().configure("/com/company/project/hibernate.cfg.xml")取自根路径+ com/company/project/hibernate.cfg.xml

如果你对Hibernate的配置中使用不同的文件名从类路径的根目录,然后如:new Configuration().configure("/database.cfg.xml")

如果你想给的配置文件的完整系统路径,然后​​从取配置文件给出确切的位置。