Ajuda com Hibernate

Pessoal, alguem poderia me dar uma ajuda com o Hibernate, dando-me alguns passos ou indicando material de estudo? sou iniciante tanto no java quanto no hibernate e não consigo fazer o mesmo funcionar, tentei rodar alguns exemplos que vieram com o proprio hibernate e naum rolou, tentei seguir um artigo aqui do GUJ mesmo, feito pra versao 1 do hibernate, adaptei pra versao 2, mas tb tive problemas…alguem possui algum material do tipo for dummies?

valeu…

Que tipo de problemas vc realmente teve ? Qt vc conhece da linhagem Java?

comecei a trabalhar com java ha cerca de 1 mes, comecei fazendo exemplos q lidassem com arquivos, depois passei para sockets e agora fiz uma aplicacao cliente-servidor utilizando xml-rpc, nesse ponto q entraria o hibernate, pois pretendo usa-lo para conectar ao BD com as requisicoes vindas atraves do xml-rpc.
O erro q ocorre qdo tento rodar a aplicacao de exemplo do artigo q usei como base eh esse:

Exception in thread “main” java.lang.NoClassDefFoundError: org/dom4j/Attribute
at AmigoDAO.(AmigoDAO.java:10)
at Chama.main(Chama.java:4)

sendo q possuo essa essa classe no meu CLASSPATH

valeu

Tem certeza que colocou o dom4j.jar no classpath??? A princípio é isso!!!

Com certeza é isso :smiley:

Esta no CLASSPATH, mas pra garantir coloquei lah no j2sdk mesmo, aih deu outro erro relativo a commons-logging, coloquei esse jar lah tb, aih deu o seguinte erro:

log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/collections/SequencedHashMap
at net.sf.hibernate.mapping.PersistentClass.(PersistentClass.java:30)
at net.sf.hibernate.mapping.RootClass.(RootClass.java:16)
at net.sf.hibernate.cfg.Binder.bindRoot(Binder.java:1242)
at net.sf.hibernate.cfg.Configuration.add(Configuration.java:249)
at net.sf.hibernate.cfg.Configuration.addInputStream(Configuration.java:285)
at net.sf.hibernate.cfg.Configuration.addClass(Configuration.java:351)
at AmigoDAO.(AmigoDAO.java:11)
at Chama.main(Chama.java:4)

valeu pessoal, toh realmente apanhando nesse inicio…

Também tem que colocar o common-collections no classpath.

Cara, pega todos os jars que tem no diretorio LIB do hibernate e coloque no classpath da sua aplicação.

Cara, essa Exception

 java.lang.NoClassDefFoundError:

indica que alguém tentou instanciar uma classe, e ela não foi encontrada.

fiz isso, olha o q retornou:

log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread “main” net.sf.hibernate.HibernateException: could not instantiate CacheProvider: net.sf.ehcache.hibernate.Provider
at net.sf.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:133)
at net.sf.hibernate.cfg.Configuration.buildSettings(Configuration.java:1132)
at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:766)
at AmigoDAO.(AmigoDAO.java:15)
at Chama.main(Chama.java:4)
Caused by: java.lang.ClassNotFoundException: net.sf.ehcache.hibernate.Provider
at java.net.URLClassLoader$1.run(URLClassLoader.java:199)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at net.sf.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:102)
at net.sf.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:130)
… 4 more

valeu…

Adivinha!!!
Faltou o ehcache.jar!!!

Dentro da pasta lib do hibernate vc tem o arquivo README que tem a lista de jars que tu tm que colocar no classpath!!!

Fallow

cara, de novo … você colocou o ehcache no seu classpath?

sério, coloca todos os jars do diretório lib do hibernate no classpath da sua aplicação.

acabei de fazer isso, joguei todo o conteudo do hibernate/lib pro j2sdk/jre/lib/ext, apesar de eu jah ter posto o hibernate/lib no CLASSPATH, e ainda dah erro:

log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread “main” net.sf.hibernate.PropertyNotFoundException: Could not find a getter for endereco in class Amigo
at net.sf.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:182)
at net.sf.hibernate.mapping.Property.getGetter(Property.java:175)
at net.sf.hibernate.persister.AbstractEntityPersister.(AbstractEntityPersister.java:733)
at net.sf.hibernate.persister.EntityPersister.(EntityPersister.java:714)
at net.sf.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:42)
at net.sf.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:137)
at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:768)
at AmigoDAO.(AmigoDAO.java:15)
at Chama.main(Chama.java:4)

valeu pessoal…

Agora, aparentemente a sua classe amigo foi mapeada como possuindo uma propriedade endereco, mas a classe amigo não possui o método getEndereco()…

realmente faltava esse metodo, adicionei ele e agora me retorna esse erro:

log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread “main” java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at net.sf.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:32)
at net.sf.hibernate.impl.BatcherImpl.openConnection(BatcherImpl.java:278)
at net.sf.hibernate.impl.SessionImpl.connect(SessionImpl.java:3297)
at net.sf.hibernate.impl.SessionImpl.connection(SessionImpl.java:3277)
at net.sf.hibernate.impl.BatcherImpl.prepareStatement(BatcherImpl.java:61)
at net.sf.hibernate.impl.BatcherImpl.prepareStatement(BatcherImpl.java:56)
at net.sf.hibernate.impl.BatcherImpl.prepareBatchStatement(BatcherImpl.java:109)
at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:460)
at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:442)
at net.sf.hibernate.impl.ScheduledInsertion.execute(ScheduledInsertion.java:29)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2407)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2360)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2229)
at AmigoDAO.insert(AmigoDAO.java:20)
at Chama.main(Chama.java:11)

parece-me um problema de mapeamento com o driver JDBC eh isso? segue o arquivo de configuracao q usei:

hibernate.connection.driver class = org.gjt.mm.mysql.Driver # o driver
hibernate.connection.url = jdbc:mysql://localhost:3306/test # a url
hibernate.connection.username = user # o username
hibernate.connection.password = pass # a senha

adicionei ele esse arquivo e tb o jar do mysql ao CLASSPATH .

Qual seria o erro agora?

se quiserem posso mandar todos os arquivos q estou usando…

valeu

Parece que ele não está encontrando o seu arquivo hibernate.properties!!!
Mas não sei afirmar se é realmente isso…
O arquivo está no classpath e se chama hibernate.properties???

sim, se chama hibernate.properties e pra evitar problemas coloquei no j2sdk/jre/lib/ext
E essas duas linhas inicias do log4j vc sabe o q significam?

log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.

valeu

Isso não é problema!!!

Ele não achou o log4j.properties se não me engano!!!

Vc usa alguma ide para fazer os seus programas?? pq colocar isso lá no j2sdk/jre/lib/ext não é uma boa!!

fallow

estou mandando todos os arquivos(classes e config) pra ver se alguem me ajuda a encontrar os meus erros:

Classe Amigo

public class Amigo
{
public String nome;
public String endereco;
public String telefone;
public String celular;
public String email;
public java.util.Date nascimento;

public Amigo(){
}
public String getNome(){
    return nome;
}
public void setNome(String nome){
    this.nome = nome;
}  
    public String getEndereco(){
        return endereco;
    }
    public void setEndereco(String endereco){
        this.endereco = endereco;
    }
    public String getTelefone(){
        return telefone;
    }
    public void setTelefone(String telefone){
        this.telefone = telefone;
    }
    public String getCelular(){
        return celular;
    }
    public void setCelular(String celular){
        this.celular = celular;
    }
    public String getEmail(){
        return email;
    }
    public void setEmail(String email){
        this.email = email;
    }
public java.util.Date getNascimento(){
    return nascimento;
}    
public void setNascimento(java.util.Date nascimento){
    this.nascimento = nascimento;
}    

}

Amigo.hbm.xml

<?xml version=“1.0”?>
<!DOCTYPE hibernate-mapping PUBLIC “-//Hibernate/Hibernate Mapping DTD//EN” “http://hibernate.sourceforge.net/hibernate-mapping.dtd”>
<hibernate-mapping>
<class name=“Amigo” table=“amigos”>

<generator class=“assigned”/>

<property name=“endereco” type=“string”/>
<property name=“telefone” column=“fone” type=“string”/>
<property name=“celular” column=“cel” type=“string”/>
<property name=“email” type=“string”/>
<property name=“nascimento” type=“date”/>
</class>
</hibernate-mapping>

Classe AmigoDAO

import net.sf.hibernate.;
import java.util.Date;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.cfg.Environment;
//import org.dom4j.
;

public class AmigoDAO{
private SessionFactory factory;

public AmigoDAO() throws Exception{
	Configuration cfg = new Configuration();
	cfg.addClass(Amigo.class);
//	Datastore datastore = hibernate.createDatastore();
//	datastore.storeClass(Amigo.class);

// factory = cfg.buildSessionFactory();
this.factory = cfg.buildSessionFactory();
}
public void insert(Amigo amigo) throws Exception{
Session session = factory.openSession();
session.save(amigo);
session.flush();
session.close();
}
public java.util.List getList(String condicao) throws Exception{
Session session = factory.openSession();
java.util.List amigos = session.find(condicao);
session.flush();
session.close();
return amigos;
}
public Amigo retrieve(String pk) throws Exception{
Session session = factory.openSession();
Amigo amigo = (Amigo)session.load(Amigo.class,pk);
session.flush();
session.close();
return amigo;
}
public void delete(Amigo amigo) throws Exception{
Session session = factory.openSession();
session.delete(amigo);
session.flush();
session.close();
}
}

hibernate.properties

hibernate.connection.driver class = org.gjt.mm.mysql.Driver # o driver
hibernate.connection.url = jdbc:mysql://localhost:3306/agenda # a url
hibernate.connection.username = user # o username
hibernate.connection.password = pass # a senha

Classe Chama

public class Chama{
public Chama(){
}
public static void main(String[] args) throws Exception{
Amigo amigo = new Amigo();
AmigoDAO novo = new AmigoDAO();
amigo.nome=“Anselmo”;
amigo.endereco=“Carlos Kraemer”;
amigo.telefone=“2134567”;
amigo.celular=“91231203”;
amigo.email=“anselmo@bol.com.br”;
amigo.nascimento= new java.util.Date(104,07,29);
novo.insert(amigo);
}
}

serah q alguma alguma caridosa pode me dar uma mão? estou desde ontem encima disso e nad ainda… :frowning:

Esqueci de responder antes…estou usando o Netbeans 3.6 agora

bom, quanto ao NetBeans eu não posso ajudar… Mas alguém aqui no guj pode!!!

Quanto a erros, vi que seu Amigo não possui id… Mas acho que foi quando vc colocou o arquivo aqui!! Pelo visto vc vai usar o nome como chave!!

Para testar vc poderia gerar a Connection na mão e passar por parametro… e depois verificar o esquema do classpath pq para mim o erro deve ser esse!!

Fallow

Falta o arquivos de propriedades do LOG4J

log4j.properties

# DEBUG
# INFO
# WARN
# ERROR
# FATAL

log4j.rootLogger= DEBUG, dest1 

log4j.appender.dest1=org.apache.log4j.ConsoleAppender
log4j.appender.dest1.layout= org.apache.log4j.PatternLayout
log4j.appender.dest1.layout.ConversionPattern=%d %-5p %-5c{3} %x -> %m%n 

Vc pode usar no lugar de DEBUG as outras constantes comentadas também. :wink: