[英]Exception when trying to create MySQL connection with Hibernate
I have been getting an exception while creating first ever application in hibernate. 在休眠状态下创建第一个应用程序时,我一直遇到异常。 I did search but the solutions provided didn't help me.
我确实进行了搜索,但是提供的解决方案并没有帮助我。 What odd I am doing here due to which I have burned my hours on this.
由于在这里我花了很多时间,所以我在这里做的事情真奇怪。
Please see the content below to better point out the issue. 请查看下面的内容以更好地指出问题。
Student.java 学生.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 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 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 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();
}
}
Yes, I have double checked that there is a username and password both root and I have also created db named school and port is 3306. 是的,我已经仔细检查了是否同时存在root用户名和密码,并且还创建了一个名为school的数据库,端口是3306。
Exception: 例外:
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
Tricky one! 整! The culprit seems to be how you configure your session factory.
罪魁祸首似乎是您配置会话工厂的方式。 The
addResource()
is for loading mappings, but silently ignores all the other settings. addResource()
用于加载映射,但无提示地忽略所有其他设置。 Try this instead: 尝试以下方法:
conf.configure(new File("resources/hibernate.cfg.xml"))
.buildSessionFactory();
Good luck with your project! 祝您项目顺利!
You didn't call configure
method 您没有调用
configure
方法
Configuration conf = new Configuration().configure();
add this it will work. 添加它会起作用。
also from hibernate 4, you can initialize with ServiceRegistry
, have a look at the documentation 同样从休眠4开始,您可以使用
ServiceRegistry
进行初始化,看看文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.