Iniciante Hibernate

Pessoal estou começando a estuda hibernate e surgiu um trabalhinho da faculdade pra fazer pra cadastra uma marca e um produto…uma marca tem varios produtos…montei o relaciomanento no banco de dados …consegui persisti a marca certinho no banco mais estou com dificuldades de persisti o produto está dando um erro e estou com dúvida se montei o relacionamento no hibernate correto, vou postar o erro e abaixo as classes:


log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.Set
	at org.hibernate.type.SetType.wrap(SetType.java:39)
	at org.hibernate.event.def.WrapVisitor.processArrayOrNewCollection(WrapVisitor.java:84)
	at org.hibernate.event.def.WrapVisitor.processCollection(WrapVisitor.java:51)
	at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101)
	at org.hibernate.event.def.WrapVisitor.processValue(WrapVisitor.java:98)
	at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55)
	at org.hibernate.event.def.AbstractSaveEventListener.visitCollectionsBeforeSave(AbstractSaveEventListener.java:371)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:273)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
	at util.Teste.main(Teste.java:39)
<?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="to.TOMarca" table="marca">
  	<id name="id" column="cod" type="java.lang.Integer">
  	<generator class="assigned"></generator>
  	</id>
  	
  	<property name="nomeMarca" type="string" column="nome"></property>
  	<property name="descricao" type="string" column="descricao"></property> 
  	
  		
  </class>
</hibernate-mapping>
<?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="to.TOProduto" table="produto">
  <id name="codProduto" column="codProduto" type="java.lang.Integer">
  <generator class="assigned"></generator>
  </id>
      
  <property name="nome" type="string" column="nome"></property>
  <property name="custoCompra" type="double" column="custo_compra"></property>
  <property name="custoVenda" type="double" column="valor_venda"></property>
  <property name="descricao" type="string" column="descricao"></property>
  
  <set name="codMarca" inverse="false">  
  	<key column="cod_marca"></key>
  	<one-to-many class="to.TOMarca"/>
  </set>
  
    
  </class>
    
</hibernate-mapping>
package to;

public class TOMarca {
	
	private int id = 0;
	private String nomeMarca = null;
	private String descricao = null;
	
	public TOMarca(int id, String nomeMarca, String descricao){
		this.id = id;
		this.nomeMarca = nomeMarca;
		this.descricao = descricao;
	}
	
	public TOMarca(){
		
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNomeMarca() {
		return nomeMarca;
	}

	public void setNomeMarca(String nomeMarca) {
		this.nomeMarca = nomeMarca;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}	
}
package to;

public class TOProduto {
	
	private int codProduto = 0;
	private String nome = null;
	private String descricao = null;
	private double custoCompra = 0.0;	
	private double custoVenda = 0.0;	
	private int codMarca ;
	
	public TOProduto(int codPoduto, String nome, String descricao, double custoCompra,
			double custoVenda, int codMarca) {
		
		this.codProduto = codPoduto;
		this.nome = nome;
		this.descricao = descricao;
		this.custoCompra = custoCompra;		
		this.custoVenda = custoVenda;
		this.codMarca = codMarca;
	}
	
	public TOProduto(){
		
	}

	public int getCodProduto() {
		return codProduto;
	}

	public void setCodProduto(int codProduto) {
		this.codProduto = codProduto;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public double getCustoCompra() {
		return custoCompra;
	}

	public void setCustoCompra(double custoCompra) {
		this.custoCompra = custoCompra;
	}

	public double getCustoVenda() {
		return custoVenda;
	}

	public void setCustoVenda(double custoVenda) {
		this.custoVenda = custoVenda;
	}

	public int getCodMarca() {
		return codMarca;
	}

	public void setCodMarca(int codMarca) {
		this.codMarca = codMarca;
	}
	
}

package util;

import org.hibernate.Session;
import org.hibernate.Transaction;

import to.TOMarca;
import to.TOProduto;
import dao.DAOProduto;

public class Teste {
	public static void main(String arg[]){
		
		Session sessao = HibernateUtility.getSession(); //Abrindo uma sessão
		Transaction transatransaction = sessao.beginTransaction(); //Iniciando uma transação
		
		TOProduto toProduto = new TOProduto();
		toProduto.setCodProduto(8);
		toProduto.setCodMarca(1);
		toProduto.setCustoCompra(10.0);
		toProduto.setCustoVenda(20.0);
		toProduto.setNome("teste Hibernate");
		toProduto.setDescricao("TESTETSTET");
		
		
		sessao.save(toProduto);
		transatransaction.commit();
		sessao.flush();
		sessao.close();
         
	}
}

Você tem um mapeamento de um conjunto (Set) para um inteiro.

Dá uma olhada no seu mapeamento do conjunto (Set) e no tipo de codMarca na classe. No mapeamento você diz que ele é um Set e na classe um inteiro.

[quote=celso.martins]Você tem um mapeamento de um conjunto (Set) para um inteiro.

Dá uma olhada no seu mapeamento do conjunto (Set) e no tipo de codMarca na classe. No mapeamento você diz que ele é um Set e na classe um inteiro.[/quote]

obrigado pela ajuda o codMarca é do tipo int , esse conjunto (Set) aonde que eu vejo isso ??

&lt;?xml version=&quot;1.0&quot;?&gt;  
&lt;!DOCTYPE hibernate-mapping PUBLIC  
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;  
&lt;hibernate-mapping&gt;  
  &lt;class name="to.TOProduto" table="produto"&gt;  
  &lt;id name="codProduto" column="codProduto" type="java.lang.Integer"&gt;  
  &lt;generator class="assigned"&gt;&lt;/generator&gt;  
  &lt;/id&gt;  
        
  &lt;property name="nome" type="string" column="nome"&gt;&lt;/property&gt;  
  &lt;property name="custoCompra" type="double" column="custo_compra"&gt;&lt;/property&gt;  
  &lt;property name="custoVenda" type="double" column="valor_venda"&gt;&lt;/property&gt;  
  &lt;property name="descricao" type="string" column="descricao"&gt;&lt;/property&gt;  
    
  &lt;set name="codMarca" inverse="false"&gt;    
    &lt;key column="cod_marca"&gt;&lt;/key&gt;  
    &lt;one-to-many class="to.TOMarca"/&gt;  
  &lt;/set&gt;  
    
       
  &lt;/class&gt;  
      
&lt;/hibernate-mapping&gt;

Desculpa Celso mais não entendi!!!

cara, aqui você define que codMarca é um Set:

&lt;set name="codMarca" inverse="false"&gt; &lt;key column="cod_marca"&gt;&lt;/key&gt; &lt;one-to-many class="to.TOMarca"/&gt; &lt;/set&gt;

Ou faça que seu produto tenha um conjunto de marcas, o que não é comum, ou transforme essa relação em one-to-one no hibernate, colocando um atributo do tipo marca em produto, removendo codMarca (será acessado pelo atributo marca). Dê uma olhada em component.

[quote=celso.martins]cara, aqui você define que codMarca é um Set:

&lt;set name="codMarca" inverse="false"&gt; &lt;key column="cod_marca"&gt;&lt;/key&gt; &lt;one-to-many class="to.TOMarca"/&gt; &lt;/set&gt;

Ou faça que seu produto tenha um conjunto de marcas, o que não é comum, ou transforme essa relação em one-to-one no hibernate, colocando um atributo do tipo marca em produto, removendo codMarca (será acessado pelo atributo marca). Dê uma olhada em component.[/quote]

mas colocando onte to one o relacionamento fica errado

Você alterou a classe produto.

Cara, você disse que está estudando o Hibernate. Te passei alguns caminhos. Dá uma olhada com mais carinho.