4
votes

I have been tried to make my first Hibernate project. I added following libraries into my project:

antlr-2.7.7 commons-collections-3.2.1 dom4j-1.6.1 hibernate-commons-annotations-4.0.1.Final hibernate-core-4.1.0.Final hibernate-jpa-2.0-api-1.0.1.Final javassist-3.15.0-GA jboss-logging-3.1.0.CR2 jboss-transaction-api_1.1_spec-1.0.0.Final mysql-connector-java-5.1.18-bin

hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password"></property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

    <mapping class="com.nda.hibernate.Person"/>
</session-factory>
</hibernate-configuration>

Person.class:

package com.nda.hibernate;

import javax.persistence.Entity;
import javax.persistence.Id;


@Entity
public class Person {

    private String name;

    @Id
    private int number;

    public Person() {}

    public Person(String name, int number) {

        this.name=name;
        this.number=number;
    }

    public void setName(String name) {
        this.name=name;
    }

    public String getName() {
        return name;
    }

    public void setNumber(int number) {
        this.number=number;
    }

    public int getNumber() {
        return number;
    }
}

I have Denwer installed. Parameters for using: login - root, password is empty. Server is localhost, and has database "test" with table "person"(CHAR(50) name, INT(10) number - primary key)

Main.class:

    SessionFactory sessions=new AnnotationConfiguration().configure().buildSessionFactory();
    Session session=sessions.openSession();

It doesn't work. I have got some errors:

03.03.2012 14:11:07 org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
03.03.2012 14:11:07 org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.1.0.Final}
03.03.2012 14:11:07 org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
03.03.2012 14:11:07 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
03.03.2012 14:11:07 org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
03.03.2012 14:11:07 org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
03.03.2012 14:11:07 org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
03.03.2012 14:11:07 org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
03.03.2012 14:11:07 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
03.03.2012 14:11:07 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 20
03.03.2012 14:11:07 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000006: Autocommit mode: false
03.03.2012 14:11:07 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost/test]
03.03.2012 14:11:07 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000046: Connection properties: {user=root, password=****}
03.03.2012 14:11:08 org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
03.03.2012 14:11:08 org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)
03.03.2012 14:11:08 org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
INFO: HHH000397: Using ASTQueryTranslatorFactory

How can I fix it? Thank you.

4
I don't see any exception in that log. Could you please show a log with an exception.Sergey Benner

4 Answers

26
votes

I was also having the same problem. After some Googling, I solve the problem.

All you have to do is to change the namespace "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" to "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd" as specified in Hibernate 3.6 Migration Guide.

12
votes

None of those look like errors to me - they're just log lines. The only "problem" is a warning here:

WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!

That's only a warning - worth fixing, but it sounds like it's not terribly urgent.

Everything else is just at INFO level... so don't worry about them. Just keep going, and see whether your code does what you expect in terms of database access.

7
votes

It's easy In your file xml hibernate configuration you must change the line

http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd

to

http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd
0
votes

Person.class should implements serializable, but it seems that the main problem you have is the Hibernate 3.6 Migration Guide!

See you.