I'm just trying to learn Hibernate (version 4 final) but I have a problem when trying to create the session factory. Here is some code related to the problem:
hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!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.url">jdbc:mysql://localhost/fitterblog</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">true</property>
<!--<mapping class="com.fitterblog.objects.Article"/>
<mapping class="com.fitterblog.objects.Nav"/>
<mapping class="com.fitterblog.objects.Tag"/>
<mapping class="com.fitterblog.objects.User"/>-->
</session-factory>
</hibernate-configuration>
HibernateUtil.java:
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
ServiceRegistryBuilder srb = new ServiceRegistryBuilder();
//NOTE: THIS IS WHERE MY PROGRAM DIES!!
srb = srb.configure();
ServiceRegistry sr = srb.buildServiceRegistry();
MetadataSources mds = new MetadataSources(sr);
/*mds.addAnnotatedClass(com.fitterblog.objects.Article.class);
mds.addAnnotatedClass(com.fitterblog.objects.Nav.class);
mds.addAnnotatedClass(com.fitterblog.objects.Tag.class);
mds.addAnnotatedClass(com.fitterblog.objects.User.class);*/
return mds.buildMetadata().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Now, what seems to be the problem is creating the ServiceRegistryBuilder. When the code execution gets to that point, it gives me the following error:
org.hibernate.internal.util.config.ConfigurationException:
Unable to perform unmarshalling at line number 14 and
column 26 in RESOURCE hibernate.cfg.xml. Message: cvc-elt.1:
Cannot find the declaration of element 'hibernate-configuration'.
full error log:
run:
Dec 27, 2011 12:51:12 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.0.0.Final}
Dec 27, 2011 12:51:12 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Dec 27, 2011 12:51:12 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Initial SessionFactory creation failed. org.hibernate.internal.util.config.ConfigurationException: Unable to perform unmarshalling at line number 14 and column 26 in RESOURCE hibernate.cfg.xml. Message: cvc-elt.1: Cannot find the declaration of element 'hibernate-configuration'.
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.fitterblog.hibernate.HibernateUtil.buildSessionFactory(HibernateUtil.java:33)
at com.fitterblog.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:18)
at com.fitterblog.objects.Article.list(Article.java:31)
at main.main(main.java:20)
Caused by: org.hibernate.internal.util.config.ConfigurationException: Unable to perform unmarshalling at line number 14 and column 26 in RESOURCE hibernate.cfg.xml. Message: cvc-elt.1: Cannot find the declaration of element 'hibernate-configuration'.
at org.hibernate.service.internal.JaxbProcessor.unmarshal(JaxbProcessor.java:120)
at org.hibernate.service.internal.JaxbProcessor.unmarshal(JaxbProcessor.java:69)
at org.hibernate.service.ServiceRegistryBuilder.configure(ServiceRegistryBuilder.java:162)
at org.hibernate.service.ServiceRegistryBuilder.configure(ServiceRegistryBuilder.java:147)
at com.fitterblog.hibernate.HibernateUtil.buildSessionFactory(HibernateUtil.java:23)
... 3 more
Caused by: javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 14; columnNumber: 26; cvc-elt.1: Cannot find the declaration of element 'hibernate-configuration'.]
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:419)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:356)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:326)
at org.hibernate.service.internal.JaxbProcessor.unmarshal(JaxbProcessor.java:108)
... 7 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 14; columnNumber: 26; cvc-elt.1: Cannot find the declaration of element 'hibernate-configuration'.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1897)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:737)
at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorHandlerImpl.startElement(ValidatorHandlerImpl.java:564)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.ValidatingUnmarshaller.startElement(ValidatingUnmarshaller.java:86)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:60)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(StAXStreamConnector.java:232)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:166)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:354)
... 9 more
Java Result: 1
BUILD SUCCESSFUL (total time: 7 seconds)
How do I fix this? I can't seem to find a solution myself.
SessionFactoryServiceRegistry is the 3rd standard Hibernate ServiceRegistry. Typically, its parent registry is the StandardServiceRegistry. SessionFactoryServiceRegistry is designed to hold Services which need access to the SessionFactory. Currently that is just 3 Services.
SessionFactory is an Interface which is present in org. hibernate package and it is used to create Session Object. It is immutable and thread-safe in nature. buildSessionFactory() method gathers the meta-data which is in the cfg Object. From cfg object it takes the JDBC information and create a JDBC Connection.
This package defines APIs for configuring Hibernate, and classes for building the Hibernate configuration-time metamodel. This package abstracts the SQL dialect of the underlying database. An internal package containing mostly implementations of central Hibernate APIs.
The methods buildSessionFactory and ServiceRegistryBuilder in Hibernate 4.3.4 are deprecated.
The right code is here.
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
.....
Configuration conf = new Configuration()
.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
SessionFactory sf = conf.buildSessionFactory(sr);
Session session = sf.openSession();
session.beginTransaction();
YourDominClass ydc = new YourDominClass();
ydc.setSomething("abcdefg");
session.save(ydc);
session.getTransaction().commit();
session.close();
sf.close();
........
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With