I am using NetbeansIDE 7.2. and pgAdmin III PostgreSQL 9.2 with Database name "StudentReports". I know a little of Hibernate and generating JasperReports using native SQL through JDBC Connection. But I am new to generating JasperReports connecting thru Hibernate Connection which this tutorial shows.
I am getting org.hibernate.InvalidMappingException: Unable to read XML Error and NEVER made a successful Hibernate Connection test, an error pops up saying "Could not parse mapping document from resource com/report/mappings/Department.hbm.xml", after following this tutorial "JasperReports with Hibernate - Module 1" and JasperReports with Hibernate - Module 2. It has 2 Modules. But I did a little modifications on its data access object (DAO) files and I just wanted to have a Department Records. Also, I used a different version of Hibernate and Jasper Reports Package and iReport Plugin for Netbeans which are Hibernate Release 4.1.9 and Jasper Reports 5.0.1 and iReport-4.5.0. I have added all of the jar files of it to my project's Library.
This is my first time handling hibernate mapping xml files and data access object files. These may sound easy for others but I really tried my part too on solving these on my own but seems I don't get it. So, Please help me figuring out these problems. I will really appreciate any help.
Thanks!
log4j:WARN No appenders could be found for logger (org.jboss.logging). log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.InvalidMappingException: Unable to read XML at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:109) at org.hibernate.cfg.Configuration.add(Configuration.java:478) at org.hibernate.cfg.Configuration.add(Configuration.java:474) at org.hibernate.cfg.Configuration.add(Configuration.java:647) at org.hibernate.cfg.Configuration.addResource(Configuration.java:730) at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2115) at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2087) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2067) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2020) at org.hibernate.cfg.Configuration.configure(Configuration.java:1935) at org.hibernate.cfg.Configuration.configure(Configuration.java:1914) at com.report.dao.DepartmentDAO.saveDepartment(DepartmentDAO.java:20) at com.report.test.AddDepartments.main(AddDepartments.java:20) Caused by: org.dom4j.DocumentException: Error on line 15 of document : The element type "hibernate-mapping" must be terminated by the matching end-tag "". Nested exception: The element type "hibernate-mapping" must be terminated by the matching end-tag "". at org.dom4j.io.SAXReader.read(SAXReader.java:482) at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:78) ... 12 more Java Result: 1
These are my codes:
Department.java
package com.report.beans;
public class Department implements java.io.Serializable {
private int id;
private String name;
public long getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url"> jdbc:postgresql://localhost:5432/StudentReports</property>
<property name="hibernate.connection.username">postgres</property>
<property name="hibernate.connection.password">postgres</property>
<property name="hibernate.connection.pool_size">1</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/report/mappings/Department.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Department.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.report.beans.Department" lazy="false" table="Department" schema="dbo" catalog="StudentReports">
<id name="id" type="long">
<column name="ID" />
<generator class="increment" />
</id>
<property name="name" type="string">
<column name="name" length="100" not-null="true" unique="true" />
</property>
</class>
</hibernate-mapping>
DepartmentDAO.java
package com.report.dao;
import com.report.beans.Department;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class DepartmentDAO{
public String saveDepartment(Department department)
{
SessionFactory sessionF = new Configuration().configure().buildSessionFactory();
Session session = sessionF.openSession();
// This is the code I modified. I didn'y use HibernateSessionFactory
// Session session = HibernateSessionFactory.getSession();
String Result = "";
try
{
session.beginTransaction();
session.save(department);
session.getTransaction().commit();
session.close();
Result = "Department Saved Successfully";
}
catch(Exception e)
{
e.printStackTrace();
session.close();
Result = "Department was not saved due to the above Exception";
}
return Result;
}
}
AddDepartments.java
package com.report.test;
import com.report.beans.Department;
import com.report.dao.DepartmentDAO;
public class AddDepartments
{
public static void main(String args[])
{
Department electronics = new Department();
electronics.setName("Electronics Engineering");
Department computerScience = new Department();
computerScience.setName("Computer science Engineering");
Department civil = new Department();
civil.setName("Civil Engineering");
String Result1 = new DepartmentDAO().saveDepartment(electronics);
System.out.println(Result1);
String Result2 = new DepartmentDAO().saveDepartment(computerScience);
System.out.println(Result2);
String Result3 = new DepartmentDAO().saveDepartment(civil);
System.out.println(Result3);
}
}