4

I have spent a few hours trying to set up my first Hibernate application and it still doesn't work.

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:

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):

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:

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

Hibernate.cfg.xml: link

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?

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
G.Spansky
  • 852
  • 6
  • 17
  • 32

5 Answers5

8

As the error says, you need to specify the dialect in your hibernate.cfg file.

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
Prerak Tiwari
  • 3,436
  • 4
  • 34
  • 64
3

I had the same problem . just add your port number after localhost .in my case it is localhost:3306

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/your_db</property>
Antony
  • 68
  • 1
  • 7
0

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?)

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

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:

<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 :)

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
DarkCygnus
  • 7,420
  • 4
  • 36
  • 59
  • Thank You Very Much. Im actually work with JPA Hibernate Entity, and for me it is very fresh. :) – G.Spansky Oct 09 '15 at 23:44
  • Password field is empty because my root MySQL user doesn't have password. Second and third point may be the problem. I'll try to change it as you mentioned. – G.Spansky Oct 09 '15 at 23:46
0

This is how I fixed my error.

My environment is same as yours Hibernate 5+, Mysql & WAMP Server

  1. Make sure you include jta jar which is included at this location \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

enter image description here

  1. And your hibernate.cfg.xml should look like this

enter image description here

Thats how it worked for me. I figured I had to give localhost and NOT %

Some Java Guy
  • 4,992
  • 19
  • 71
  • 108
0

Check for passwor is correct or not in hibernate.cfg.xml

<property name="connection.password">root</property>
KhAn SaAb
  • 5,248
  • 5
  • 31
  • 52