Hibernate não salva!

Prezados Colegas,

estou com uma classe quamada QuestionarioRCBP que possui um relação de um para muitos com a classe InfraEstruturaRCBP. Entretanto quando chamo o método que salva o questionario ele não está salvando a array de infra estrutura. Alguém poderia me dar uma luz e dizer se encontra algum erro?

segue o código:

QuestionarioTest:

package br.gov.inca.publico.test;

import java.util.HashSet;
import java.util.Set;

import br.gov.inca.publico.bean.ItenInfraEstrutura;
import br.gov.inca.publico.dao.Dao;
import br.gov.inca.rcbp.bean.InfraEstruturaRCBP;
import br.gov.inca.rcbp.bean.QuestionarioRCBP;
import br.gov.inca.rcbp.bean.RCBP;
import br.gov.inca.rcbp.bean.StatusQuestionario;

public class QuestionarioTest {
	public static void main(String args[]) {
		try {
			QuestionarioRCBP tmp = new QuestionarioRCBP();
			tmp.setSituacaoQuestionario(StatusQuestionario.RASCUNHO);
			// teste
			RCBP rcbp = new RCBP();
			rcbp.setIdInstituicao(200);
			tmp.setRcbp(rcbp);
			tmp.setQualEstudoSobrevida(" ");
			// fim teste
			Set<InfraEstruturaRCBP> infras = new HashSet<InfraEstruturaRCBP>();
			Dao<ItenInfraEstrutura> daoItenInfra = new Dao<ItenInfraEstrutura>();

			for (ItenInfraEstrutura itemInfra : daoItenInfra
					.listar(new ItenInfraEstrutura())) {
				InfraEstruturaRCBP infra = new InfraEstruturaRCBP();
				infra.setItemInfraEstrutura(itemInfra);
				infra.setQtdItem(new Integer(10));
				infras.add(infra);
			}

			tmp.setInfraEstruturas(infras);
			tmp.setAbrangenciaPopulacao("teste");
			tmp.setAnoImplantacao("2006");
			tmp.setAnoInicioColeta("2007");
			Dao<QuestionarioRCBP> daoQuestionario = new Dao<QuestionarioRCBP>();
			daoQuestionario.inserirAtualizar(tmp);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

QuestionarioRCBP:

package br.gov.inca.rcbp.bean;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import br.gov.inca.publico.bean.TipoFlag;

@Entity
@Table(name = "rcbp_questionario", schema = "rcbp")
@SequenceGenerator(name = "SEQUENCE", sequenceName = "rcbp.rcbp_questionario_id_questionario_rcbp_seq")
public class QuestionarioRCBP {

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQUENCE")
	@Column(name = "id_questionario_rcbp")
	private int idQuestionarioRCBP;

	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "id_instituicao")
	private RCBP rcbp;

	@OneToMany(mappedBy = "questionario", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
	private Set<InfraEstruturaRCBP> infraEstruturas = new HashSet<InfraEstruturaRCBP>();

	@OneToMany(mappedBy = "questionario", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
	private Set<QuadroDePessoal> quadroDePessoal = new HashSet<QuadroDePessoal>();

	@Column(name = "ds_abrangencia_populacao")
	private String abrangenciaPopulacao;

	@Column(name = "aa_implantacao")
	private String anoImplantacao;

	@Column(name = "aa_inicio_coleta")
	private String anoInicioColeta;

	@Column(name = "nm_orgao_responsavel_organograma")
	private String orgaoResponsavelOrganograma;

	@Column(name = "fg_utiliza_sisbasepop_inca")
	private String utilizaSisbasepopInca = TipoFlag.NAO;

	@Column(name = "ds_versao_sisbasepop_inca")
	private String versaoSisbasepopInca;

	@Column(name = "fg_consulta_comissao_assessora")
	private String consultaComissaoAcessoria = TipoFlag.NAO;

	@Column(name = "fg_gerencia_recurso_ppi")
	private String gerenciaRecursoPPI = TipoFlag.NAO;

	@Column(name = "fg_gerencia_recursos_pav")
	private String gerenciaRecursoPAV = TipoFlag.NAO;

	@Column(name = "ds_periodo_enviado_iarc")
	private String periodoEnviadoIARC;

	@Column(name = "fg_consulta_banco_sim")
	private String consultaBancoSIM = TipoFlag.NAO;

	@Column(name = "fg_consulta_banco_apac")
	private String consultaBancoAPAC = TipoFlag.NAO;

	@Column(name = "fg_faz_seguimento")
	private String fazSeguimento = TipoFlag.NAO;

	@Column(name = "fg_participa_estudo_sobrevida")
	private String participalEstudoSobrevida = TipoFlag.NAO;

	@Column(name = "ds_qual_estudo_sobrevida")
	private String qualEstudoSobrevida;

	@Column(name = "fg_retorna_informacoes_sim")
	private String retornaInformacoesSIM = TipoFlag.NAO;

	@Column(name = "fg_vigilancia_dant")
	private String vigilanciaDANT = TipoFlag.NAO;

	@Column(name = "fg_regulacao_rao")
	private String regulacaoRAO = TipoFlag.NAO;

	@Column(name = "fg_controle_colo_mama")
	private String controleColoMama = TipoFlag.NAO;

	@Column(name = "ds_outra_atividade")
	private String outraAtividade;

	@Column(name = "fg_perfil_incidencia")
	private String perfilIncidencia = TipoFlag.NAO;

	@Column(name = "fg_analise_espacial_incidencia")
	private String analiseEspecialIncidencia = TipoFlag.NAO;

	@Column(name = "fg_relatorios_fontes_notificadoras")
	private String relatoriosFontesNotificadoras = TipoFlag.NAO;

	@Column(name = "dt_preenchimento")
	private Date dataPreenchimento = new Date();

	@Column(name = "st_questionario")
	private String situacaoQuestionario;

	public String getAbrangenciaPopulacao() {
		return abrangenciaPopulacao;
	}

	public void setAbrangenciaPopulacao(String abrangenciaPopulacao) {
		this.abrangenciaPopulacao = abrangenciaPopulacao;
	}

	public String getAnaliseEspecialIncidencia() {
		return analiseEspecialIncidencia;
	}

	public void setAnaliseEspecialIncidencia(String analiseEspecialIncidencia) {
		this.analiseEspecialIncidencia = analiseEspecialIncidencia;
	}

	public String getAnoImplantacao() {
		return anoImplantacao;
	}

	public void setAnoImplantacao(String anoImplantacao) {
		this.anoImplantacao = anoImplantacao;
	}

	public String getAnoInicioColeta() {
		return anoInicioColeta;
	}

	public void setAnoInicioColeta(String anoInicioColeta) {
		this.anoInicioColeta = anoInicioColeta;
	}

	public String getConsultaBancoAPAC() {
		return consultaBancoAPAC;
	}

	public void setConsultaBancoAPAC(String consultaBancoAPAC) {
		this.consultaBancoAPAC = consultaBancoAPAC;
	}

	public String getConsultaBancoSIM() {
		return consultaBancoSIM;
	}

	public void setConsultaBancoSIM(String consultaBancoSIM) {
		this.consultaBancoSIM = consultaBancoSIM;
	}

	public String getConsultaComissaoAcessoria() {
		return consultaComissaoAcessoria;
	}

	public void setConsultaComissaoAcessoria(String consultaComissaoAcessoria) {
		this.consultaComissaoAcessoria = consultaComissaoAcessoria;
	}

	public String getControleColoMama() {
		return controleColoMama;
	}

	public void setControleColoMama(String controleColoMama) {
		this.controleColoMama = controleColoMama;
	}

	public Date getDataPreenchimento() {
		return dataPreenchimento;
	}

	public void setDataPreenchimento(Date dataPreenchimento) {
		this.dataPreenchimento = dataPreenchimento;
	}

	public String getFazSeguimento() {
		return fazSeguimento;
	}

	public void setFazSeguimento(String fazSeguimento) {
		this.fazSeguimento = fazSeguimento;
	}

	public String getGerenciaRecursoPAV() {
		return gerenciaRecursoPAV;
	}

	public void setGerenciaRecursoPAV(String gerenciaRecursoPAV) {
		this.gerenciaRecursoPAV = gerenciaRecursoPAV;
	}

	public String getGerenciaRecursoPPI() {
		return gerenciaRecursoPPI;
	}

	public void setGerenciaRecursoPPI(String gerenciaRecursoPPI) {
		this.gerenciaRecursoPPI = gerenciaRecursoPPI;
	}

	public int getIdQuestionarioRCBP() {
		return idQuestionarioRCBP;
	}

	public void setIdQuestionarioRCBP(int idQuestionarioRCBP) {
		this.idQuestionarioRCBP = idQuestionarioRCBP;
	}

	public Set<InfraEstruturaRCBP> getInfraEstruturas() {
		return infraEstruturas;
	}

	public void setInfraEstruturas(Set<InfraEstruturaRCBP> infraEstruturas) {
		this.infraEstruturas = infraEstruturas;
	}

	public String getOrgaoResponsavelOrganograma() {
		return orgaoResponsavelOrganograma;
	}

	public void setOrgaoResponsavelOrganograma(String orgaoResponsavelOrganograma) {
		this.orgaoResponsavelOrganograma = orgaoResponsavelOrganograma;
	}

	public String getOutraAtividade() {
		return outraAtividade;
	}

	public void setOutraAtividade(String outraAtividade) {
		this.outraAtividade = outraAtividade;
	}

	public String getParticipalEstudoSobrevida() {
		return participalEstudoSobrevida;
	}

	public void setParticipalEstudoSobrevida(String participalEstudoSobrevida) {
		this.participalEstudoSobrevida = participalEstudoSobrevida;
	}

	public String getPerfilIncidencia() {
		return perfilIncidencia;
	}

	public void setPerfilIncidencia(String perfilIncidencia) {
		this.perfilIncidencia = perfilIncidencia;
	}

	public String getPeriodoEnviadoIARC() {
		return periodoEnviadoIARC;
	}

	public void setPeriodoEnviadoIARC(String periodoEnviadoIARC) {
		this.periodoEnviadoIARC = periodoEnviadoIARC;
	}

	public Set<QuadroDePessoal> getQuadroDePessoal() {
		return quadroDePessoal;
	}

	public void setQuadroDePessoal(Set<QuadroDePessoal> quadroDePessoal) {
		this.quadroDePessoal = quadroDePessoal;
	}

	public String getQualEstudoSobrevida() {
		return qualEstudoSobrevida;
	}

	public void setQualEstudoSobrevida(String qualEstudoSobrevida) {
		this.qualEstudoSobrevida = qualEstudoSobrevida;
	}

	public RCBP getRcbp() {
		return rcbp;
	}

	public void setRcbp(RCBP rcbp) {
		this.rcbp = rcbp;
	}

	public String getRegulacaoRAO() {
		return regulacaoRAO;
	}

	public void setRegulacaoRAO(String regulacaoRAO) {
		this.regulacaoRAO = regulacaoRAO;
	}

	public String getRelatoriosFontesNotificadoras() {
		return relatoriosFontesNotificadoras;
	}

	public void setRelatoriosFontesNotificadoras(
			String relatoriosFontesNotificadoras) {
		this.relatoriosFontesNotificadoras = relatoriosFontesNotificadoras;
	}

	public String isRetornaInformacoesSIM() {
		return retornaInformacoesSIM;
	}

	public void setRetornaInformacoesSIM(String retornaInformacoesSIM) {
		this.retornaInformacoesSIM = retornaInformacoesSIM;
	}

	public String getSituacaoQuestionario() {
		return situacaoQuestionario;
	}

	public void setSituacaoQuestionario(String situacaoQuestionario) {
		this.situacaoQuestionario = situacaoQuestionario;
	}

	public String getUtilizaSisbasepopInca() {
		return utilizaSisbasepopInca;
	}

	public void setUtilizaSisbasepopInca(String utilizaSisbasepopInca) {
		this.utilizaSisbasepopInca = utilizaSisbasepopInca;
	}

	public String getVersaoSisbasepopInca() {
		return versaoSisbasepopInca;
	}

	public void setVersaoSisbasepopInca(String versaoSisbasepopInca) {
		this.versaoSisbasepopInca = versaoSisbasepopInca;
	}

	public String getVigilanciaDANT() {
		return vigilanciaDANT;
	}

	public void setVigilanciaDANT(String vigilanciaDANT) {
		this.vigilanciaDANT = vigilanciaDANT;
	}

	/*
	 * private Set coordenadores = new HashSet();
	 *
	 * private Set situacoesAtuaisBase = new HashSet();
	 */


}

InfraEstruturaRCBP:

package br.gov.inca.rcbp.bean;

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

import br.gov.inca.publico.bean.ItenInfraEstrutura;

@Entity
@Table(name = "rcbp_infra_estrutura", schema = "rcbp")
@SequenceGenerator(name = "SEQUENCE", sequenceName = "rcbp.rcbp_infra_estrutura_id_infraestrutura_rcbp_seq")
public class InfraEstruturaRCBP {
	@Id
	@Column(name = "id_infraestrutura_rcbp")
	private int idInfraEstruturaRCBP;

	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "id_questionario_rcbp")
	private QuestionarioRCBP questionario;

	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "id_item_infra_estrutura")
	private ItenInfraEstrutura itemInfraEstrutura;

	@Column(name = "qt_item")
	private int qtdItem;

	public int getIdInfraEstruturaRCBP() {
		return idInfraEstruturaRCBP;
	}

	public void setIdInfraEstruturaRCBP(int idInfraEstruturaRCBP) {
		this.idInfraEstruturaRCBP = idInfraEstruturaRCBP;
	}

	public ItenInfraEstrutura getItemInfraEstrutura() {
		return itemInfraEstrutura;
	}

	public void setItemInfraEstrutura(ItenInfraEstrutura itemInfraEstrutura) {
		this.itemInfraEstrutura = itemInfraEstrutura;
	}

	public int getQtdItem() {
		return qtdItem;
	}

	public void setQtdItem(int qtdItem) {
		this.qtdItem = qtdItem;
	}

	public QuestionarioRCBP getQuestionario() {
		return questionario;
	}

	public void setQuestionario(QuestionarioRCBP questionario) {
		this.questionario = questionario;
	}

}

coloque o seu DAO aqui…

ta usando transaction?
[]´s

Geraldo Barboza

Dao

package br.gov.inca.publico.dao;

import java.util.ArrayList;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;

public class Dao<T> {
	private static Logger log = Logger.getLogger(Dao.class);

	public Dao(){
	}
	public void inserirAtualizar(Object obj) throws Exception {
		try{
			Session session = CreateSession.currentSession();
			Transaction tx = session.beginTransaction();
			session.saveOrUpdate(obj);
			log.info("Inserindo ou atualizando um objeto...");
			log.debug(obj);
			tx.commit();
			log.info("Objeto inserido ou atualizado!");
			session.close();
		}catch(Exception e){
			log.fatal(e);
		}
	}
	public ArrayList<T> buscar(Object obj, ArrayList<Criterion> criterios) throws Exception {
		Session session = CreateSession.currentSession();
		Criteria criteria = session.createCriteria(obj.getClass());
		log.debug(obj);
		log.info("Buscando objeto...");
		for(Criterion criterion : criterios)
			criteria.add(criterion);
		log.debug(obj);
		return (ArrayList<T>)criteria.list();
	}
	public ArrayList<T> listar(Object obj)throws Exception{
		Session session = CreateSession.currentSession();
		Criteria criteria = session.createCriteria(obj.getClass());
		return (ArrayList<T>)criteria.list();
	}
	public void excluir(Object obj) throws Exception {
		try{
			Session session = CreateSession.currentSession();
			Transaction tx = session.beginTransaction();
			session.delete(obj);
			log.debug(obj);
			log.info("Excluindo o objeto ");
			tx.commit();
			log.info("Objeto excluído!");
			session.close();
		}catch(Exception e){
			log.fatal(e);
		}
	}
	public Object carregar(Class obj, int value)throws Exception{
		Session session = CreateSession.currentSession();
		log.info("Carregando o objeto ");
        return session.load(obj,value);
    }
}

Classe que cria a session:

package br.gov.inca.publico.dao;

import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.classic.Session;

public class CreateSession {
	private static Logger log = Logger.getLogger(CreateSession.class);

	private static final SessionFactory sessionFactory;

	private static final ThreadLocal<Session> sessionThread = new ThreadLocal<Session>();

	private static final ThreadLocal<Transaction> transactionThread = new ThreadLocal<Transaction>();

	public CreateSession() {
	}

	public static Session getSession() throws Exception {
		Session session = null;
		try {
			log.info("Criando Session Factory...");
			SessionFactory sf = new AnnotationConfiguration().configure()
					.buildSessionFactory();
			log.info("Session Factory Criada!");
			session = sf.openSession();
		} catch (Exception e) {
			log.fatal(e);
		}
		return session;
	}

	static {
		try {
			sessionFactory = new AnnotationConfiguration().configure()
					.buildSessionFactory();
		} catch (RuntimeException e) {
			e.printStackTrace();
			throw e;
		}
	}

	public static Session currentSession() {
		if (sessionThread.get() == null) {
			Session session = sessionFactory.openSession();
			sessionThread.set(session);
		}
		return sessionThread.get();
	}

	private static void closeSession() {
		Session session = sessionThread.get();
		if (session != null) {
			session.close();
		}
		sessionThread.set(null);
	}

	public static void beginTransaction() {
		if (transactionThread.get() == null) {
			Transaction transaction = currentSession().beginTransaction();
			transactionThread.set(transaction);
		}
	}

	public static void commitTransaction() {
		Transaction transaction = transactionThread.get();
		if (transaction != null && !transaction.wasCommitted()
				&& !transaction.wasRolledBack()) {
			transaction.commit();
			transactionThread.set(null);
		}
		closeSession();
	}

	public static void rollbackTransaction() {
		Transaction transaction = transactionThread.get();
		if (transaction != null && !transaction.wasCommitted()
				&& !transaction.wasRolledBack()) {
			transaction.rollback();
			transactionThread.set(null);
		}
		closeSession();
	}
}

bom dia, tente trocar o saveorupdate por save apenas…

[]'s

vc consegue buscar algo do banco com o hirnate?

talvez seja configuracao de usuario e banco no hibernate.propiertes

[]'s

Geraldo

Você precisa configurar o CascadeType do relacionamento para Infra com PERSIST(ou ALL, depende da sua necessidade), na classe Questionario.