2016-06-11 88 views
0

在Hibernate中創建第一個應用程序時,我一直收到異常。我做了搜索,但提供的解決方案並沒有幫助我。我在這裏做了什麼奇怪的事情,因此我在這裏燒了幾個小時。嘗試與Hibernate創建MySQL連接時發生異常

請參閱下面的內容以更好地指出問題。 Project Structure with all libraries being used

Student.java

package beans; 

public class Student { 
    private int studentId; 
    private String name; 
    private int marks; 
    public int getStudentId() { 
     return studentId; 
    } 
    public void setStudentId(int studentId) { 
     this.studentId = studentId; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public int getMarks() { 
     return marks; 
    } 
    public void setMarks(int marks) { 
     this.marks = marks; 
    } 


} 

的hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
    <session-factory> 
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="connection.url">jdbc:mysql://localhost:3306/school</property> 
     <property name="connection.username">root</property> 
     <property name="connection.password">root</property> 

     <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 
     <property name="hbm2dll.auto">create</property> 
     <property name="show_sql">true</property> 

     <mapping resource="resources/Student.hbm.xml" /> 
    </session-factory> 
</hibernate-configuration> 

Student.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
    <class name="beans.Student" table="student" schema="school"> 
     <id name="studentId"/> 
     <property name="name"/> 
     <property name="marks"/> 
    </class> 
</hibernate-mapping> 

Test.java

package test; 

import org.hibernate.cfg.Configuration; 

public class Test { 
    public static void main(String[] args) { 
     Configuration conf = new Configuration(); 
     conf.addResource("resources/hibernate.cfg.xml").buildSessionFactory(); 
    } 
} 

是的,我有雙重檢查,有一個用戶名和密碼根和我也分貝命名學校和端口創建爲3306

例外:

WARN: HHH000342: Could not obtain connection to query metadata : The application must supply JDBC connections 
Exception in thread "main" 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:691) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:723) 
    at test.Test.main(Test.java:8) 
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set 
    at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100) 
    at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54) 
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137) 
    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 
+0

你能或許與我們共享的例外呢? –

+0

我剛剛分享了這個例外。請建議。謝謝@PerHuss –

回答

1

你沒有打電話給configure方法

Configuration conf = new Configuration().configure(); 

添加此它將工作。

也從休眠4,你可以用ServiceRegistry初始化,看看文檔

+0

謝謝,這解決了我的問題。 –

1

整蠱一個!罪魁禍首似乎是你如何配置你的會話工廠。 addResource()用於加載映射,但默默忽略所有其他設置。試試這個:

conf.configure(new File("resources/hibernate.cfg.xml")) 
    .buildSessionFactory(); 

祝您的項目順利!

相關問題