Ajuda em Relacionamento com Hibernate Annotations[Resolvido]

Galera tenho que fazer um software web usando uma base antiga tava dando uma estudada e como nao tenho DER fiz um engenharia reversa da base(eu obtive autorizaçao para fazer isto sim)… E fiquei com duvida no relacionamento das tabelas que seguem em imagem…

Alguem poderia me dar uma ajudinha para o mapeamento entra as classes usando Hibernate …

Desde ja muito obrigado a todos…


Crie dois beans…

um chamado estoque e um chamado produto

sendo q no bean Produto vc terá uma pk de acordo com a sua necessidade

e no bean Estoque:

use

@ManytoOne
@Cascade(value={CascadeType.ALL})
Produto produto = new Produto();

De uma olhada tb no Guia de Referencia do Hibernate, vai te ajudar.

http://www.hibernate.org/hib_docs/annotations/reference/en/pdf/hibernate_annotations.pdf

Bom galera vou colocar os trechos de codigos aqui se alguem puder me ajudar…

Primeiro a classe Produto

/*
 * Produtos.java
 *
 * Created on July 24, 2007, 11:35 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package beans;

import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author Administrador
 */
@Entity
@Table(name="TBPRODUTOS")
@NamedQueries({
    @NamedQuery(name="PROD", query="SELECT p FROM Produtos p")
})
public class Produtos implements java.io.Serializable {

    @OneToMany(mappedBy = "produto")
    private List<Estoque> estoques;
    
    @Id
    private int procodigo;
    
    private String proCodbarra;
    
    private String proDesc;
   
   //Getters e Setters
}

Classe Estoque

/*
 * Estoque.java
 *
 * Created on July 24, 2007, 11:38 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package beans;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 *
 * @author Administrador
 */
@Entity
@Table(name="TBESTOQUE")
public class Estoque implements java.io.Serializable {
    
    @Id
    @Column(name="procodigo")
    @ManyToOne
    @JoinColumn(name="procodigo", referencedColumnName="procodigo")
    private Produtos produto;
    
    private Integer estVenda;

    //getters e setters
}

Classe de teste

import beans.Produtos;
import hibernate.util.HibernateUtil;
import java.util.List;
import org.hibernate.Query;
/*
 * Teste.java
 *
 * Created on July 24, 2007, 4:07 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

/**
 *
 * @author Administrador
 */
public class Teste {
    
    /** Creates a new instance of Teste */
    public Teste() {
        
        Query q = HibernateUtil.getSession().getNamedQuery("PROD");
        List<Produtos> results = q.list();
        
        for (int i = 0; i < results.size(); i++) {
        System.out.println("Produto: "+results.get(i).getProDesc()+" "+                                           
                                    results.get(i).getEstoques().get(0));       
         }
        
        System.out.println(results.size());
        
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new Teste();
    }
    
}

E o erro que ele da é o seguinte

2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> done materializing entity [beans.Produtos#27859]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> resolving associations for [beans.Produtos#27860]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> done materializing entity [beans.Produtos#27860]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> resolving associations for [beans.Produtos#27861]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> done materializing entity [beans.Produtos#27861]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> resolving associations for [beans.Produtos#27862]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> done materializing entity [beans.Produtos#27862]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> resolving associations for [beans.Produtos#27863]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> done materializing entity [beans.Produtos#27863]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> resolving associations for [beans.Produtos#27864]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> done materializing entity [beans.Produtos#27864]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> resolving associations for [beans.Produtos#27865]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> done materializing entity [beans.Produtos#27865]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> resolving associations for [beans.Produtos#27866]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> done materializing entity [beans.Produtos#27866]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> resolving associations for [beans.Produtos#27867]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> done materializing entity [beans.Produtos#27867]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> resolving associations for [beans.Produtos#27868]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.TwoPhaseLoad -> done materializing entity [beans.Produtos#27868]
2007-07-25 15:57:06,984 DEBUG hibernate.engine.StatefulPersistenceContext -> initializing non-lazy collections
2007-07-25 15:57:06,984 DEBUG hibernate.jdbc.ConnectionManager -> aggressively releasing JDBC connection
2007-07-25 15:57:06,984 DEBUG hibernate.jdbc.ConnectionManager -> releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
2007-07-25 15:57:07,000 DEBUG hibernate.loader.Loader -> loading collection: [beans.Produtos.estoques#1]
2007-07-25 15:57:07,000 DEBUG hibernate.jdbc.AbstractBatcher -> about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
2007-07-25 15:57:07,000 DEBUG hibernate.jdbc.ConnectionManager -> opening JDBC connection
2007-07-25 15:57:07,000 DEBUG org.hibernate.SQL -> select estoques0_.procodigo as procodigo1_, estoques0_.procodigo as procodigo1_0_, estoques0_.estVenda as estVenda1_0_ from TBESTOQUE estoques0_ where estoques0_.procodigo=?
Hibernate: select estoques0_.procodigo as procodigo1_, estoques0_.procodigo as procodigo1_0_, estoques0_.estVenda as estVenda1_0_ from TBESTOQUE estoques0_ where estoques0_.procodigo=?
2007-07-25 15:57:07,000 DEBUG hibernate.jdbc.AbstractBatcher -> about to open ResultSet (open ResultSets: 0, globally: 0)
2007-07-25 15:57:07,000 DEBUG hibernate.loader.Loader -> result set contains (possibly empty) collection: [beans.Produtos.estoques#1]
2007-07-25 15:57:07,062 INFO hibernate.type.SerializableType -> could not read column value from result set: procodigo1_0_; Error converting to array of bytes.
2007-07-25 15:57:07,062 DEBUG hibernate.jdbc.AbstractBatcher -> about to close ResultSet (open ResultSets: 1, globally: 1)
2007-07-25 15:57:07,062 DEBUG hibernate.jdbc.AbstractBatcher -> about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
2007-07-25 15:57:07,062 DEBUG hibernate.util.JDBCExceptionReporter -> could not initialize a collection: [beans.Produtos.estoques#1] [select estoques0_.procodigo as procodigo1_, estoques0_.procodigo as procodigo1_0_, estoques0_.estVenda as estVenda1_0_ from TBESTOQUE estoques0_ where estoques0_.procodigo=?]
org.firebirdsql.jdbc.field.TypeConvertionException: Error converting to array of bytes.
at org.firebirdsql.jdbc.field.FBField.getBytes(FBField.java:612)
Exception in thread “main” org.hibernate.exception.SQLGrammarException: could not initialize a collection: [beans.Produtos.estoques#1]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.firebirdsql.jdbc.FBResultSet.getBytes(FBResultSet.java:808)
at org.hibernate.type.AbstractBynaryType.get(AbstractBynaryType.java:78)
at org.hibernate.type.SerializableType.get(SerializableType.java:33)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154)
at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1097)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:565)
at org.hibernate.loader.Loader.doQuery(Loader.java:701)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.loadCollection(Loader.java:1994)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.loadCollection(Loader.java:2001)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1716)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1716)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at org.hibernate.collection.PersistentBag.toString(PersistentBag.java:483)
at java.lang.String.valueOf(String.java:2827)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at Teste.(Teste.java:27)
at Teste.main(Teste.java:38)
2007-07-25 15:57:07,062 WARN hibernate.util.JDBCExceptionReporter -> SQL Error: 0, SQLState: 07006
2007-07-25 15:57:07,062 ERROR hibernate.util.JDBCExceptionReporter -> Error converting to array of bytes.
at org.hibernate.collection.PersistentBag.toString(PersistentBag.java:483)
at java.lang.String.valueOf(String.java:2827)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at Teste.(Teste.java:27)
at Teste.main(Teste.java:38)
Caused by: org.firebirdsql.jdbc.field.TypeConvertionException: Error converting to array of bytes.
at org.firebirdsql.jdbc.field.FBField.getBytes(FBField.java:612)
at org.firebirdsql.jdbc.FBResultSet.getBytes(FBResultSet.java:808)
at org.hibernate.type.AbstractBynaryType.get(AbstractBynaryType.java:78)
at org.hibernate.type.SerializableType.get(SerializableType.java:33)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154)
at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1097)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:565)
at org.hibernate.loader.Loader.doQuery(Loader.java:701)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.loadCollection(Loader.java:1994)
… 11 more

Java Result: 1

Coloquei uma parte antes de começar a dar o erro.

Se no For eu tirar a chamado results.get(i).getEstoques().get(0) ele funciona direito

Só dando um up.
As vez alguem ja passou por isso…

Bom Galera consegui resolver o problema obrigado a todos pela ajuda…

Vou deixar aqui como resolvi…

Classe Produtos

//Imports

@Entity
@Table(name = "TBPRODUTOS")
public class Produtos implements Serializable {

    @Id
    @Column(name = "PROCODIGO", nullable = false)
    private Integer procodigo;

    @Column(name = "PROCODBARRA", nullable = false)
    private String procodbarra;

    @Column(name = "PRODESC")
    private String prodesc;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "produtos")
    private List<Estoque> estoqueCollection;

    //Getters e Setters
}

Classe EstoquePK

//Imports

@Embeddable
public class EstoquePK implements Serializable {

    @Column(name = "PROCODIGO", nullable = false)
    private int procodigo;

    @Column(name = "EMPFILIAL", nullable = false)
    private int empfilial;

    //getters e setters
}

Classe Estoque

//Imports

@Entity
@Table(name = "TBESTOQUE")
public class Estoque implements Serializable {

    /**
     * EmbeddedId primary key field
     */
    @EmbeddedId
    protected EstoquePK estoquePK;

    @Column(name = "ESTVENDA")
    private BigDecimal estvenda;

    @JoinColumn(name = "PROCODIGO", referencedColumnName = "PROCODIGO", insertable = false, updatable = false)
    @ManyToOne
    private Produtos produtos;
    
    //getters e setters
}

Bom fica se alguem passar pela mesma situaçao algum dia