Olá Galera GUJ,
Estou tentando desenvolver um sistema que cadastra um campeonato e atribui várias etapas a este campeonato.
Ex: Campeonato de Minas Gerais(Etapa Juiz de Fora, Etapa Belo Horizonte, Etapa Ouro Preto).
tenho 2 tabelas em meu banco, a tabela Campeonato e tabela Etapa que possuem um relacionamento 1:n, dessa forma, na tabela Etapa existe uma chave estrangeira q faz referencia a chave primaria da tabela Campeoanto. Até aí tudo bem.
Tenho 2 telas, uma eu insiro o Campeonato e na outra eu ensiro as etapas referente a este campeonato. Na tela de Cadastrar os Campeonatos, funfa direitinho.
Na tela de cadastrar Etapas fiz um JCombobox mostrando o nome de todos os Campeonatos persitidos até o momento.
A pergunta é, como eu faço para escolher um dos campeonatos cadastrados(utilizando Jcombobox que ja está funcionando) e Cadastrar várias etapas para este campeonato???
Estou utilizando Netbenas 6.0.1 + FireBird2.0 + Hibernate 3.0.
Estou precisando mt de ajuda!! Obrigado
Se você tiver uma collection de Etapas em Campeonato (ex: List<Etapa> etapas) você pode ir adicionando essas etapas à collection (etapas.add()) e depois dar um update no campeonato.
Sim, eu tenho na classe POJO Campeonato a seguinte declaração:
Private Set Etapas = new HashSet();
Tenho 3 Pacotes: Controler, Model e View.
Sendo que as POJO ficam em Controler e a classe q estou inserindo as Etapas fica em View, logo não tem como eu acessa-la pois está privado.
Olha só meus códigos:
XML CAMPEONATO
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Controler.CTR_campeonato" table="CAMPEONATO">
<id name="idCampeonato" column="IDCAMPEONATO">
<generator class="increment"/>
</id>
<property name="nome" column="NOME"/>
<property name="dtCampeonato" column="DATACAMPEONATO"/>
<set name="Etapas" inverse="true" lazy="true">
<key column="CAMPEONATO_IDCAMPEONATO" not-null="true"/>
<one-to-many class="Controler.CTR_etapa"/>
</set>
<set name="Indices" inverse="true" lazy="true">
<key column="CAMPEONATO_IDCAMPEONATO"/>
<one-to-many class="Controler.CTR_indice"/>
</set>
<set name="Clubes" table="CLUBES_NOS_CAMPEONATOS" inverse="true">
<key column="CAMPEONATO_IDCAMPEONATO"/>
<many-to-many class="Controler.CTR_clube" column="IDCLUBE"/>
</set>
</class>
</hibernate-mapping>
XML ETAPA
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Controler.CTR_etapa" table="ETAPA">
<id name="idEtapa" column="IDETAPA">
<generator class="increment"/>
</id>
<property name="nome" column="NOME"/>
<property name="cidade" column="CIDADE"/>
<property name="estado" column="ESTADO"/>
<property name="dtEtapa" column="DATAETAPA" />
<property name="hrEtapa" column="HORAETAPA"/>
<set name="Provas" inverse="true" lazy="true">
<key column="PROVA_IDPROVA" not-null="true"/>
<one-to-many class="Controler.CTR_prova"/>
</set>
<many-to-one name="Campeonato" class="Controler.CTR_campeonato" column="IDCAMPEONATO"/>
</class>
</hibernate-mapping>
POJO CAMPEONATO
package Controler;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class CTR_campeonato implements Serializable{
private String nome, dtCampeonato;
private int idCampeonato;
private Set Etapas = new HashSet();
private Set Clubes = new HashSet();
private Set Indices = new HashSet();
public CTR_campeonato()
{ }
//Méodos Sets e Gets
POJO ETAPA
[code]
package Controler;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class CTR_etapa implements Serializable{
//declarando as variaveis
private String nome, cidade, estado, dtEtapa, hrEtapa;
private int idEtapa;
private Controler.CTR_campeonato Campeonato;
private Set Provas = new HashSet() ;
//Métodos Sets e Gets
}[/code]
Meu problema está sendo inserir as etapas. Pois não sei como definir a chave estrangeira na hora de inserir-las.
Obrigado!!
oi!
pegue um objeto do tipo Campeonato e sete ele na sua Etapa, antes de gravar a Etapa, o Campeonato ja deve ter um ID setado, se nao voce vai receber TransientObjectException.
abracos
Hibernate: /* criteria query */ select this_.IDCAMPEONATO as IDCAMPEO1_0_, this_.NOME as NOME2_0_, this_.DATACAMPEONATO as DATACAMP3_2_0_ from CAMPEONATO this_
Passou por Aki
Hibernate: /* insert Controler.CTR_etapa */ insert into ETAPA (NOME, CIDADE, ESTADO, DATAETAPA, HORAETAPA, Campeonato, IDETAPA) values (?, ?, ?, ?, ?, ?, ?)
2008-08-26 22:06:35,109 WARN hibernate.util.JDBCExceptionReporter SQL Error: 335544569, SQLState: HY000
2008-08-26 22:06:35,109 ERROR hibernate.util.JDBCExceptionReporter GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -206
Column unknown
HORAETAPA
At line 1, column 86
2008-08-26 22:06:35,109 WARN hibernate.util.JDBCExceptionReporter SQL Error: 335544569, SQLState: HY000
2008-08-26 22:06:35,109 ERROR hibernate.util.JDBCExceptionReporter GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -206
Column unknown
HORAETAPA
At line 1, column 86
2008-08-26 22:06:35,109 ERROR event.def.AbstractFlushingEventListener Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: could not insert: [Controler.CTR_etapa]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
org.hibernate.exception.GenericJDBCException: could not insert: [Controler.CTR_etapa]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1869)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2200)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1869)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:46)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2200)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)
Fiz isso, porém está dando este erro.
Vou postar tb o código da ação do botão gravar
[code]
private void BTgravarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
List Campeonatos = DAO_campeonato.listarCampeonatos();
camp = new CTR_campeonato();
for (Object o : Campeonatos){
camp = (CTR_campeonato)o;
String x = jCombocampeonato.getSelectedItem().toString();
if(camp.getNome().equals(x)){
System.out.println(“Passou por Aki”);
etapa = new CTR_etapa();
etapa.setCampeonato(camp);
etapa.setIdEtapa(0); //Chave primaria é auto-increment
etapa.setNome(JTFnome.getText());
etapa.setDtEtapa(JTFdata.getText());
etapa.setHrEtapa(JTFhora.getText());
etapa.setCidade(JTFcidade.getText());
etapa.setEstado(JTFestado.getText());
DAO_etapa.salvar(etapa);
break;
}
}
}[/code]
Faço a minima ideia do que seja isso, caso seja necessário eu posto o código da Classe DAO
Muito Obrigado Pela Força!!!
Problema resolvido…
Abandonei esse tal de hibernate que tava me dando dor de cabeça e passei a usar o JDBC conectarndo com SQL Puro. Graças a isso meu sistema está quase pronto
T+