Java Hibernate 和 MySQL 配置
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/32594554/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Hibernate and MySQL configuration
提问by G.Spansky
I have spent a few hours trying to set up my first Hibernate application and it still doesn't work.
我花了几个小时试图设置我的第一个 Hibernate 应用程序,但它仍然无法正常工作。
I have WAMP Server with my MySQL Data Base called "hibernatetest". I have Project in Eclipse, which contains Hibernate library, and mysql-connector-java-5.1.18-bin.jar. I have also this classes:
我有 WAMP 服务器和我的 MySQL 数据库,称为“hibernatetest”。我在 Eclipse 中有项目,其中包含 Hibernate 库和 mysql-connector-java-5.1.18-bin.jar。我也有这门课:
HibernateUtil.java:
HibernateUtil.java:
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
test.java (contains main):
test.java(包含主):
import org.hibernate.Session;
import templates.Album;
public class test {
public static void main(String[] args){
Album i = new Album();
i.setID(1);
i.setArtist("Iron Maiden");
i.setTitle("The Book of Souls");
i.setLabel("Warner Music");
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(i);
session.getTransaction().commit();
session.close();
System.out.println("Saved");
}
}
Album.java:
专辑.java:
package templates;
public class Album {
private int ID;
private String title;
private String artist;
private String label;
public Album(){
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
}
Album.hbm.xml: link
专辑.hbm.xml:链接
Hibernate.cfg.xml: link
Hibernate.cfg.xml:链接
StackTrace:
堆栈跟踪:
wrz 15, 2015 10:04:47 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.0.1.Final}
wrz 15, 2015 10:04:47 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
wrz 15, 2015 10:04:47 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
wrz 15, 2015 10:04:47 PM 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.
wrz 15, 2015 10:04:48 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.0.Final}
wrz 15, 2015 10:04:49 PM org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator initiateService
WARN: HHH000181: No appropriate connection provider encountered, assuming application will be supplying connections
wrz 15, 2015 10:04:49 PM org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator initiateService
WARN: HHH000342: Could not obtain connection to query metadata : The application must supply JDBC connections
Initial SessionFactory creation failed.org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
Exception in thread "main" java.lang.ExceptionInInitializerError
at HibernateUtil.buildSessionFactory(HibernateUtil.java:18)
at HibernateUtil.<clinit>(HibernateUtil.java:7)
at test.main(test.java:13)
Caused by: 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 HibernateUtil.buildSessionFactory(HibernateUtil.java:12)
... 2 more
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)
... 15 more
What am I doing wrong?
我究竟做错了什么?
采纳答案by Antony
I had the same problem . just add your port number after localhost .in my case it is localhost:3306
我有同样的问题 。只需在 localhost 之后添加您的端口号。在我的情况下,它是 localhost:3306
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/your_db</property>
回答by Prerak Tiwari
As the error says, you need to specify the dialect in your hibernate.cfgfile.
正如错误所说,您需要在hibernate.cfg文件中指定方言。
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
回答by DarkCygnus
I noticed some things that may be causing the trouble:
我注意到一些可能导致问题的事情:
1) In your hibernate.cfg.xml
you are not specifying the password for your connection. You can do so by adding the <property name="connection.password">your_Pass_here</property>
property (or did you ommit it for privacy reasons?)
1)在你的hibernate.cfg.xml
你没有为你的连接指定密码。您可以通过添加<property name="connection.password">your_Pass_here</property>
属性来实现(或者您是否出于隐私原因省略了它?)
2) as @Prerak Tiwari mentioned, you are not specifying the Dialect. Do so as he mentioned with the <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
property
2)正如@Prerak Tiwari 提到的,您没有指定方言。按照他提到的<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
财产做
3) I notice that the name of you properties is different as the ones most people use. Instead of adding ...name="hibernate.connection.driver_class"...
ommit the hibernate.
part, so it should look like this:
3)我注意到您的属性名称与大多数人使用的名称不同。而不是添加...name="hibernate.connection.driver_class"...
ommithibernate.
部分,所以它应该是这样的:
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/hibernatetest</property>
<property name="connection.username">root</property>
Your password property here...
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="/templates/Album.hbm.xml"/>
</session-factory>
Hope some of this works for you :)
希望其中一些对您有用:)
回答by Some Java Guy
This is how I fixed my error.
这就是我修复错误的方法。
My environment is same as yours Hibernate 5+
, Mysql
& WAMP Server
我的环境和你一样Hibernate 5+
,Mysql
&WAMP Server
- Make sure you include
jta jar
which is included at this location\hibernate-release-5.0.5.Final\lib\osgi
- 确保
jta jar
包含此位置包含的内容\hibernate-release-5.0.5.Final\lib\osgi
- You should add new user and grant all privileges. And the HOST should be
localhost
- 您应该添加新用户并授予所有权限。而主机应该是
localhost
- And your hibernate.cfg.xml should look like this
- 你的 hibernate.cfg.xml 应该是这样的
Thats how it worked for me. I figured I had to give localhost
and NOT %
这就是它对我的工作方式。我想我必须给予localhost
而不是%
回答by KhAn SaAb
Check for passwor is correct or not in hibernate.cfg.xml
检查密码是否正确 hibernate.cfg.xml
<property name="connection.password">root</property>