Travei no Hibernate

4 respostas
R

Pessoal,

Estou estudando o Hibernate desde os passos mais básicos através da própria documentação do Hibernate 3, como alguns tutoriais na Internet. Mas o problema é que cheguei até certo ponto e parei. Também não consigo saber se o que eu fiz até agora é certo ou não. Se puderem me ajudar…

Bom a primeira coisa que fiz foi baixar o Hibernate 3 e o JDBC do MySQL e adicionei os dois .JAR no classpah do projeto. Estou usando o Eclipse com o Java 6.

Em seguida, criei um banco de dados chamado catalogo e duas tabelas no MySQL relacionadas. Os scripts:

CREATE TABLE 'categoria_filmes' (
  'id_categoria' int(11) NOT NULL,
  'nome' varchar(50) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  ('id_categoria')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE 'filmes' (
  'idfilme` int(11) NOT NULL,
  'titulo_original' varchar(80) collate utf8_unicode_ci NOT NULL,
  'ano_lancamento' varchar(4) collate utf8_unicode_ci NOT NULL,
  'sinopse' text collate utf8_unicode_ci NOT NULL,
  'tempo_duracao' varchar(10) collate utf8_unicode_ci NOT NULL,
  'diretor' varchar(50) collate utf8_unicode_ci NOT NULL,
  'distribuidor' varchar(50) collate utf8_unicode_ci NOT NULL,
  'categoria' int(11) NOT NULL,
  'titulo_portugues' varchar(90) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  ('idfilme')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

A coluna categoria da tabela filmes é relacionada com a tabela categoria_filmes.

Depois criei os objetos de cada tabela:

Classe da tabela categoria_filmes

package br.com.catalogo.hibernate.maps;

/**
* Objeto para a tabela categoria_filmes
*/
public class Categoria {

	private Long idCategoria;
	private String descricao;

	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public long getIdCategoria() {
		return idCategoria;
	}
	public void setIdCategoria(long idCategoria) {
		this.idCategoria = idCategoria;
	}
}

HBM da tabela categoria_filmes

<?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="br.com.catalogo.hibernate.maps.Categoria" table="categoria_filmes">
        <id name="idCategoria" type="long" column="id_categoria">
            <generator class="assigned" />
        </id>
        <property name="descricao">
            <column name="nome" />
        </property>
    </class>
</hibernate-mapping>

Classe da tabela filmes

package br.com.catalogo.hibernate.maps;

public class Filme {

	private Long idFilme;
	private String tituloPortugues;
	private String tituloOriginal;
	private String anoLancamento;
	private String sinopse;
	private String tempoDuracao;
	private String diretor;
	private String distribuidor;
	private Categoria categoria;

	public String getAnoLancamento() {
		return anoLancamento;
	}
	public void setAnoLancamento(String anoLancamento) {
		this.anoLancamento = anoLancamento;
	}
	public Categoria getCategoria() {
		return categoria;
	}
	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}
	public String getDiretor() {
		return diretor;
	}
	public void setDiretor(String diretor) {
		this.diretor = diretor;
	}
	public String getDistribuidor() {
		return distribuidor;
	}
	public void setDistribuidor(String distribuidor) {
		this.distribuidor = distribuidor;
	}
	public String getSinopse() {
		return sinopse;
	}
	public void setSinopse(String sinopse) {
		this.sinopse = sinopse;
	}
	public String getTempoDuracao() {
		return tempoDuracao;
	}
	public void setTempoDuracao(String tempoDuracao) {
		this.tempoDuracao = tempoDuracao;
	}
	public String getTituloOriginal() {
		return tituloOriginal;
	}
	public void setTituloOriginal(String tituloOriginal) {
		this.tituloOriginal = tituloOriginal;
	}
	public String getTituloPortugues() {
		return tituloPortugues;
	}
	public void setTituloPortugues(String tituloPortugues) {
		this.tituloPortugues = tituloPortugues;
	}
	public long getIdFilme() {
		return idFilme;
	}
	public void setIdFilme(long idFilme) {
		this.idFilme = idFilme;
	}
}

HBM da tabela filmes

<?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="br.com.catalogo.hibernate.maps.Filme" table="filmes">

		<id name="idFilme" type="long" column="idfilme">
			<generator class="assigned" />
		</id>

		<property name="tituloPortugues">
			<column name="titulo_portugues" />
		</property>

		<property name="tituloOriginal">
			<column name="titulo_original" />
		</property>

		<property name="anoLancamento">
			<column name="ano_lancamento" />
		</property>

		<property name="sinopse">
			<column name="sinopse" />
		</property>

		<property name="tempoDuracao">
			<column name="tempo_duracao" />
		</property>

		<property name="diretor">
			<column name="diretor" />
		</property>

		<property name="distribuidor">
			<column name="distribuidor" />
		</property>

		<many-to-one name="categoria" column="categoria"
			not-null="true" />

	</class>

</hibernate-mapping>

Depois de feito esse mapeamento, criei o arquivo de configuração do hibernate. Criei o 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.driver_class">com.mysql.jdbc.Driver</property>

		<property name="hibernate.connection.url">jdbc:mysql://localhost/catalogo</property>

		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password"></property>
		<property name="hibernate.connection.pool_size">10</property>
		<property name="show_sql">true</property>
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="hibernate.hbm2ddl.auto">update</property>

		<!-- Mapping files -->
		<mapping resource="/maps/hbm/categoria.hbm.xml" />
		<!-- /Mapping Files -->

	</session-factory>
</hibernate-configuration>

Pronto, parei aqui!
Não consigo progredir. Também não sei se a configuração acima feita está certa ou não, não sei como testar.

Não sei se há mais configurações para fazer ou se eu já posso começar a fazer os inserts ou consultas. Se já posso começar a fazer as operações no banco, como fazer isso em código?

Desculpe se falei ou fiz alguma besteira, ainda estou tentando aprender o Hibernate.

Obrigado

4 Respostas

Anderson_Leite

Cria uma classe mais ou menos como a abaixo e roda roda com Run As -> java Application

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

public class TesteInsere {

	public static void main(String[] args) {

		SessionFactory sf = new Configuration().configure().buildSessionFactory();
		Session s = sf.openSession();
		System.err.println(s.getClass());
		
		Filme f = new Filme();
		Categoria c = new Categoria();
                //seta alguns valores
		
		Transaction t = s.beginTransaction();
		s.save(f);	
		t.commit();
		
		s.close();
		sf.close();
	}
	
}
R

Muito obrigado pela resposta, mas ainda não funcionou.

É lançada a seguinte exception:

Exception in thread "main" java.lang.NoClassDefFoundError: org/dom4j/DocumentException
	at br.com.teste.Teste.main(Teste.java:17)

Minha código do teste ficou assim:

package br.com.teste;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import br.com.hibernate.maps.Categoria;
import br.com.hibernate.maps.Filme;

public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SessionFactory sf = new Configuration().configure()
				.buildSessionFactory();
		Session s = sf.openSession();
		System.err.println(s.getClass());

		Categoria c = new Categoria();
		c.setDescricao("Teste 1");

		Transaction t = s.beginTransaction();
		s.save(c);
		t.commit();

		s.close();
		sf.close();
	}
}
Anderson_Leite

Tem alguma coisa errada no seu ambiente, ve se tem um dom4j-1.6.1.jar (ou parecido) no seu WEB-INF/lib.

R

Isso mesmo Anderson, Era o ambiente.

Faltava algumas bibliotecas do Hibernate para funcionar (dom4J, log4J…).

Agora está funcionando.

Obrigado.

Criado 13 de maio de 2008
Ultima resposta 14 de mai. de 2008
Respostas 4
Participantes 2