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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 12:49:34  来源:igfitidea点击:

Hibernate and MySQL configuration

javamysqleclipsehibernatehibernateexception

提问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.xmlyou 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)正如@Prera​​k 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

  1. Make sure you include jta jarwhich is included at this location \hibernate-release-5.0.5.Final\lib\osgi
  1. 确保jta jar包含此位置包含的内容\hibernate-release-5.0.5.Final\lib\osgi

enter image description here

在此处输入图片说明

  1. You should add new user and grant all privileges. And the HOST should be localhost
  1. 您应该添加新用户并授予所有权限。而主机应该是localhost

enter image description here

在此处输入图片说明

  1. And your hibernate.cfg.xml should look like this
  1. 你的 hibernate.cfg.xml 应该是这样的

enter image description here

在此处输入图片说明

Thats how it worked for me. I figured I had to give localhostand 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>