Hibernate

11 respostas
F

Olá, tem uma tabela no banco onde temu uma chave primaria composta, e eu precisso pegar dados dessa tabela mais eu não consigo fazer o hibernate pegar estes dados da tabela.

A pergunta é como fica o meu Teste.hbm.xml???

Lah vai o codigo sql da tabela

CREATE TABLE testecomposto (
  ide VARCHAR2(15) NOT NULL,
  idi NUMBER(10,0) NOT NULL
)
  PCTUSED    0
/

ALTER TABLE testecomposto
  ADD CONSTRAINT xpk_testecomposto PRIMARY KEY (
    ide,
    idi
  )
/

Codigo da meu Modelo

public class TesteCompostoMd {
    
    /** Creates a new instance of MovimentoMd */
    public TesteCompostoMd() {
    }

    
    private String ide;
    private Integer idi;

    public String getIde() {
        return ide;
    }

    public void setIde(String ide) {
        this.ide = ide;
    }

    public Integer getIdi() {
        return idi;
    }

    public void setIdi(Integer idi) {
        this.idi = idi;
    }
    
    
}

Este eh meu controle

public class TesteCompostoCtr {
    

    private static TesteCompostoMd objCliente;
    private Session db = GerenciadorHibernate.currentSession();
    /**
     * @param args the command line arguments
     */
    public TesteCompostoCtr() {
        setObjCliente(new TesteCompostoMd());
    }
    
        
    /**
    * Método que retorna a lista de objetos ClienteMd contido em Db.
    * @return ArrayList<ClienteMd>
    */    
    public ArrayList<TesteCompostoMd> getLista(){
        return new ArrayList<TesteCompostoMd>(db.createCriteria(TesteCompostoMd.class).list());
    }

    public void teste(){
    
     Iterator<TesteCompostoMd> iter = getLista().iterator();

        while (iter.hasNext()){

            objCliente = iter.next();
             System.out.println(objCliente.getIde());
      
        }
     
       
        
    }   
     
     

    public TesteCompostoMd getObjCliente() {
        return objCliente;
    }

    public void setObjCliente(TesteCompostoMd objCliente) {
        this.objCliente = objCliente;
    }
    
   

    
}

[b]
como fica o meu mapeamento do hiberntae???

Socorro???[/b]

valew pela ajuda quem me ajudar !!!

11 Respostas

J

Tente assim:

<hibernate-mapping> <class name="TesteCompostoMd" table="testecomposto"> <composite-id> <key-property name="ide"/> <key-property name="idi"/> </composite-id> </class> </hibernate-mapping>

F

nunca usei chave composta no hibernate… sempre preferi ids sequenciais…
mas em todo caso, acho q fica ± assim:

<composite-id>
<key-property name=“ide”/>
<key-property name=“idi”/>
</composite-id>

de uma boa olhada em:
http://www.hibernate.org/hib_docs/v3/reference/en/html/mapping.html#mapping-declaration-compositeid

F

Não funciono!!!

&lt;hibernate-mapping&gt; 
   &lt;class name="TesteCompostoMd" table="testecomposto"&gt; 
      &lt;composite-id&gt; 
         &lt;key-property name="ide"/&gt; 
         &lt;key-property name="idi"/&gt; 
      &lt;/composite-id&gt; 
   &lt;/class&gt; 
&lt;/hibernate-mapping&gt;

Deu o seguinte erro:


Exception in thread “main” java.lang.NullPointerException
at testecomposto.Main.main(Main.java:32)
Java Result: 1

anteriormente falto eu colocar o codigo do meu main:

public class Main &#123;
    
    
    private static TesteCompostoCtr objMov;
    
    public Main&#40;&#41; &#123;
        setObjMov&#40;new TesteCompostoCtr&#40;&#41;&#41;;
    &#125;
    
    public static void main&#40;String&#91;&#93; args&#41; &#123;
        
        
        getObjMov&#40;&#41;.teste&#40;&#41;;
        
    &#125;
    
    public static TesteCompostoCtr getObjMov&#40;&#41; &#123;
        return objMov;
    &#125;
    
    public static void setObjMov&#40;TesteCompostoCtr aObjMov&#41; &#123;
        objMov = aObjMov;
    &#125;
                      
    
&#125;
J

Você não atribuiu nenhum valor para o atributo objMov, então ele é nulo, e lançará exceção quando você tentar chamar o metodo teste();

obs.: Me parece que você tentou inicializar ele no construtor, mas note que você não está instanciando essa classe Main, então o construtor Main() não está sendo chamado…

F

Obrigado resovel aquele problema agora estou com outro erro:

[b]

Exception in thread main java.lang.NoClassDefFoundError: org/dom4j/DocumentException

at br.localfrio.side.persistencia.hibernate.GerenciadorHibernate.<clinit>(GerenciadorHibernate.java:14)

at movimento.TesteCompostoCtr.<init>(TesteCompostoCtr.java:26)

at testecomposto.Main.main(Main.java:30)

Java Result: 1

[/b]

F

Na verdade esse era o meu erro real, por que estou fazendo uma aplicação web e nesta aplicação não tenho main…

Adaptei para fazer este teste para ficar mais facil de explicar o meu problema… e erro q sempre tive problema é o seguinte:

Exception in thread main java.lang.NoClassDefFoundError: org/dom4j/DocumentException

at br.localfrio.side.persistencia.hibernate.GerenciadorHibernate.<clinit>(GerenciadorHibernate.java:14)

at movimento.TesteCompostoCtr.<init>(TesteCompostoCtr.java:26)

at testecomposto.Main.main(Main.java:30)

Java Result: 1

MUITO OBRIGADO PARA VOCES QUE ESTAO ME AJUDANDO!!!

J

Está faltando essa classe aí no seu classpath, você copiou todos os jar’s da pasta lib do Hibernate?

Lá tem um jar que se chama dom4j(versão).jar, pegue ele e coloque no seu classpath (lib do Tomcat se for web), lá na pasta lib do Hibernate tambem vem um arquivo README.txt que informa quais jar’s são requeridos e quais são opcionais, leia ele tambem pra saber o que você pode deixar de lado.

F

Po jurava que tinha colocado esse jar. !!! Mais realmente não coloquei muito obrigado.

Vou colocar e se eu tiver com algum problema novamente irei escrever aqui, nao se esqueça de dah uma olhadinha mais tarde valew…

Brigadão mesmo… muito grato

F

Este é meu novo erro:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).

log4j:WARN Please initialize the log4j system properly.

%%%% Error Creating SessionFactory %%%%

org.hibernate.MappingException: composite-id class must implement Serializable: movimento.TesteCompostoMd

at org.hibernate.mapping.RootClass.checkCompositeIdentifier(RootClass.java:220)

at org.hibernate.mapping.RootClass.validate(RootClass.java:201)

at org.hibernate.cfg.Configuration.validate(Configuration.java:984)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1169)

at br.localfrio.side.persistencia.hibernate.GerenciadorHibernate.currentSession(GerenciadorHibernate.java:25)

at movimento.TesteCompostoCtr.<init>(TesteCompostoCtr.java:26)

at testecomposto.Main.main(Main.java:30)

Exception in thread main java.lang.NullPointerException

at br.localfrio.side.persistencia.hibernate.GerenciadorHibernate.currentSession(GerenciadorHibernate.java:31)

at movimento.TesteCompostoCtr.<init>(TesteCompostoCtr.java:26)

at testecomposto.Main.main(Main.java:30)

Java Result: 1
J

Sua classe TesteCompostoMd deve ser serializavel, faça ela implementar a interface java.io.Serializable.

ex.:

public class TesteCompostoMd implements Serializable&#123;

&#125;
F

Meu muito obrigado!!! Não sei nem como agradecer tava me matando a tempos em efazer isso e agora até quem fim consegui… graça a sua ajuda muito obrigado mesmo…

:lol: :grin: :eek: :slight_smile:

BrigadooooooooooooooooooOOOOOOOOOOOOOOOOO…

Abração ateh mais!!!

Criado 24 de agosto de 2006
Ultima resposta 25 de ago. de 2006
Respostas 11
Participantes 3