Olá! Estou começando o estudo de Hibernate e tive alguns problemas com configuração que não consigo resolver.
Uso o Ubuntu 11.10 e no momento não estou usando IDE, mas uso o Ant e inclui o seguinte alvo:
<target name="hibernatetest" depends="build">
<java fork="true" classpathref="master-classpath"
classname="com.visualpatterns.timex.test.HibernateTest" />
</target>
Tenho o arquivo HibernateTest.java para realizar o teste inicial:
package com.visualpatterns.timex.test;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.visualpatterns.timex.model.Department;
//TODO: Add Javadoc comments
public class HibernateTest
{
public static void main(String args[]) throws Exception
{
SessionFactory sessionFactory = new Configuration().configure()
.buildSessionFactory();
Session session = sessionFactory.openSession(); // changed to
// openSession
Transaction tx = session.beginTransaction();
Department department;
// Demo 1: Get single record
department = (Department) session.get(Department.class, "IT");
System.out.println("Name for IT = " + department.getName());
// Demo 2: Get all records
List departmentList = session.createQuery("from Department").list();
for (int i = 0; i < departmentList.size(); i++)
{
department = (Department) departmentList.get(i);
System.out.println("Row " + (i + 1) + "> " + department.getName()
+ " (" + department.getDepartmentCode() + ")");
}
tx.commit();
session.close();
sessionFactory.close();
}
}
A classe Department.java:
package com.visualpatterns.timex.model;
public class Department{
String departmentCode;
String name;
public void setDepartmentCode(String _departmentCode){
this.departmentCode = _departmentCode;
}
public String getDepartmentCode(){
return this.departmentCode;
}
public void setName(String _name){
this.name = _name;
}
public String getName(){
return this.name;
}
}
O arquivo Department.hbm.xml:
<?xml version="1.0"?>
<!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.visualpatterns.timex.model.Department" table="Department">
<id name="departmentCode" column="departmentCode">
<generator class="assigned"/>
</id>
<property name="name" column="name"/>
</class>
</hibernate-mapping>
E o arquivo hibernate.cfg.xml está da seguinte forma:
<?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>
<!-- Database connection settings -->
<property name="connection.driver_class">
org.hsqldb.jdbcDriver
</property>
<property name="connection.url">
jdbc:hsqldb:hsql://localhost:9005/timex
</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
<property name="connection.pool_size">2</property>
<property name="show_sql">true</property>
<property name="dialect">
org.hibernate.dialect.HSQLDialect
</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">
org.hibernate.cache.NoCacheProvider
</property>
<!-- Arquivos de mapeamento -->
<mapping resource="Department.hbm.xml" />
<!--<mapping resource="Timesheet.hbm.xml" />
<mapping resource="Employee.hbm.xml" />-->
</session-factory>
</hibernate-configuration>
Estou usando o Hibernate 4 e inclui todos os .jar da pasta required na pasta lib do meu projeto, porém quando vou rodar o teste tenho o seguinte problema:
kamilla@kamilla-pc:~/HelloWorld/timex$ ant hibernatetest
Buildfile: /home/kamilla/HelloWorld/timex/build.xml
init:
compile:
[javac] /home/kamilla/HelloWorld/timex/build.xml:122: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
updateweb:
updateconfig:
[echo] Environment config file: local.properties
updatelib:
build:
hibernatetest:
[java] Exception in thread "main" java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
[java] at com.visualpatterns.timex.test.HibernateTest.main(HibernateTest.java:15)
[java] Caused by: java.lang.ClassNotFoundException: org.hibernate.cfg.Configuration
[java] at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
[java] ... 1 more
[java] Java Result: 1
BUILD SUCCESSFUL
Total time: 2 seconds
Já configurei o CLASSPATH da seguinte forma:
export CLASSPATH=/opt/hibernate/lib/required
E também tentei:
export CLASSPATH=/opt/hibernate/lib/required/hibernate4.jar
Mas nada resolve o problema… Não sei o que fazer para configurar, pois pra mim ele deveria já funcionar. Não faz muito sentido não reconhecer o arquivo em org/hibernate/cfg/Configuration. Alguém pode me ajudar a resolver?