Erro Hibernate com mapeamento ManyToMany

cara,

fiz um teste aqui e funcionou, so fiz um pequena alteração no meu codigo, segue

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)    
   @JoinTable(name="colaborador_ferias", schema = "catalogo",   
              joinColumns={@JoinColumn(name="id_ferias")},     
              inverseJoinColumns={@JoinColumn(name="id_colaborador")})    
   private List<Colaborador> colaboradores;   

ai fiz uma pesquisa no banco, fiz o relacionamento das entidades e inseriu normal.

t+

Nesse teste que fez você apenas adicionou o fetch type né? Na classe Colaborador ou Table 1, pelo seu exemplo, voce nao alterou nada né?

Aqui eu adicionei o fetchtype na classe férias e tambem não funcionou, não sei mesmo o que pode ser. Ainda não consegui colocar o log4j para rodar aqui, não esta salvando nada no arquivo de log, vou continuar tentando aqui.

Valeu mesmo pela ajuda

cara,

vc pode colocar o fetch nas duas entidades que nao vai fazer diferenca, vc nao tem mais entidades relacionadas com suas entidades ferias e coloborador, faz o seguinte, posta a sua classe ferias e coloborador completa.

t+

COLABORADOR:

package catalogo.modelo;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name = "colaborador", schema = "catalogo")
@Inheritance(strategy = InheritanceType.JOINED)
public class Colaborador implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id_colaborador")
    private int id;
    
    @Column(name="nome")
    private String nome;
    
    @Column(name="data_nascimento")
    @Temporal(TemporalType.DATE)
    private Date dataNascimento;
    
    @Column(name="naturalidade")
    private String naturalidade;
    
    @Column(name="nacionalidade")
    private String nacionalidade;
    
    @Column(name="sexo")
    private String sexo;
    
    @Column(name="tipo_sanguineo")
    private String tipoSanguineo;
    
    @Column(name="fator_rh")
    private String fatorRh;
    
    @Column(name="pai")
    private String pai;
    
    @Column(name="mae")
    private String mae;
    
    @Column(name="estado_civil")
    private String estadoCivil;
    
    @Column(name="conjuge")
    private String conjuge;
    
    @Column(name="dependentes")
    private String dependentes;    

    @OneToOne
    @JoinColumn(name = "id_endereco", referencedColumnName = "id_endereco", insertable = true, updatable = true)
    @Cascade(CascadeType.ALL)
    private Endereco endereco;
    
    @Column(name="telefone1")
    private String telefone1;
    
    @Column(name="telefone2")
    private String telefone2;
    
    @Column(name="celular1")
    private String celular1;
    
    @Column(name="celular2")
    private String celular2;
    
    @Column(name="email_pessoal")
    private String emailPessoal;
    
    @Column(name="email_institucional")
    private String emailInstitucional;
    
    @Column(name="rg")
    private String rg;
    
    @Column(name="orgao_expedidor")
    private String orgaoExpedidor;
    
    @Column(name="expedicao_rg")
    @Temporal(TemporalType.DATE)
    private Date expedicaoRg;
    
    @Column(name="cpf")
    private String cpf;
    
    @Column(name="titulo_eleitoral")
    private String tituloEleitoral;
    
    @Column(name="pis_pasep")
    private String pisPasep;
    
    @Column(name="conselho_classe")
    private String conselhoClasse;
    
    @Column(name="data_admissao")
    @Temporal(value=javax.persistence.TemporalType.DATE)
    private Date dataAdmissao;
    
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id_instituicao", referencedColumnName = "id_instituicao", insertable = true, updatable = true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.PERSIST)
    private Instituicao instituicao;
    
    @Column(name="observacoes")
    private String observacoes;
    
    @OneToOne
    @JoinColumn(name = "id_foto", referencedColumnName = "id_foto")
    @Cascade(CascadeType.SAVE_UPDATE)
    private Foto foto;
    
    @Column(name="situacao")
    private String situacao;
    
    @Column(name="placa_veiculo")
    private String placaVeiculo;
    
    @Column(name="num_cadastro_veiculo")
    private String cadastroVeiculo;
    
    @Column(name="descricao_veiculo")
    private String descricaoVeiculo;
    
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id_funcao", referencedColumnName = "id_funcao", insertable = true, updatable = true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.PERSIST)
    private Funcao funcao;
    
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id_setor", referencedColumnName = "id", insertable = true, updatable = true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.PERSIST)
    private Setor setor;
    
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id_cargo", referencedColumnName = "id_cargo", insertable = true, updatable = true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.PERSIST)
    private Cargo cargo;

    @Column(name="data_desligamento")
    @Temporal(TemporalType.DATE)
    private Date dataDesligamento;
        
    /*@ManyToMany(fetch=FetchType.EAGER) 
    @JoinTable(name="colaborador_ferias", schema="catalogo", 
               joinColumns=@JoinColumn(name="id_colaborador"), 
               inverseJoinColumns=@JoinColumn(name="id_ferias")) 
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.ALL)
    private Collection<Ferias> ferias;*/
    
    @ManyToMany(mappedBy = "colaboradores", cascade = javax.persistence.CascadeType.ALL)
    private List<Ferias> ferias;
    
    public Colaborador()
    {
    }

    public String getCelular1()
    {
        return celular1;
    }

    public void setCelular1(String celular1)
    {
        this.celular1 = celular1;
    }

    public String getCelular2()
    {
        return celular2;
    }

    public void setCelular2(String celular2)
    {
        this.celular2 = celular2;
    }

    public String getConjuge()
    {
        return conjuge;
    }

    public void setConjuge(String conjuge)
    {
        this.conjuge = conjuge;
    }

    public String getConselhoClasse()
    {
        return conselhoClasse;
    }

    public void setConselhoClasse(String conselhoClasse)
    {
        this.conselhoClasse = conselhoClasse;
    }

    public String getCpf()
    {
        return cpf;
    }

    public void setCpf(String cpf)
    {
        this.cpf = cpf;
    }

    public Date getDataAdmissao()
    {
        return dataAdmissao;
    }

    public void setDataAdmissao(Date dataAdmissao)
    {
        this.dataAdmissao = dataAdmissao;
    }

    public Date getDataNascimento()
    {
        return dataNascimento;
    }

    public void setDataNascimento(Date dataNascimento)
    {
        this.dataNascimento = dataNascimento;
    }

    public String getDependentes()
    {
        return dependentes;
    }

    public void setDependentes(String dependentes)
    {
        this.dependentes = dependentes;
    }

    public String getEmailInstitucional()
    {
        return emailInstitucional;
    }

    public void setEmailInstitucional(String emailInstitucional)
    {
        this.emailInstitucional = emailInstitucional;
    }

    public String getEmailPessoal()
    {
        return emailPessoal;
    }

    public void setEmailPessoal(String emailPessoal)
    {
        this.emailPessoal = emailPessoal;
    }

    public String getEstadoCivil()
    {
        return estadoCivil;
    }

    public void setEstadoCivil(String estadoCivil)
    {
        this.estadoCivil = estadoCivil;
    }

    public Date getExpedicaoRg()
    {
        return expedicaoRg;
    }

    public void setExpedicaoRg(Date expedicaoRg)
    {
        this.expedicaoRg = expedicaoRg;
    }

    public String getFatorRh()
    {
        return fatorRh;
    }

    public void setFatorRh(String fatorRh)
    {
        this.fatorRh = fatorRh;
    }

    public int getId()
    {
        return id;
    }

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

    public String getMae()
    {
        return mae;
    }

    public void setMae(String mae)
    {
        this.mae = mae;
    }

    public String getNacionalidade()
    {
        return nacionalidade;
    }

    public void setNacionalidade(String nacionalidade)
    {
        this.nacionalidade = nacionalidade;
    }

    public String getNaturalidade()
    {
        return naturalidade;
    }

    public void setNaturalidade(String naturalidade)
    {
        this.naturalidade = naturalidade;
    }

    public String getNome()
    {
        return nome;
    }

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

    public String getObservacoes()
    {
        return observacoes;
    }

    public void setObservacoes(String observacoes)
    {
        this.observacoes = observacoes;
    }

    public String getOrgaoExpedidor()
    {
        return orgaoExpedidor;
    }

    public void setOrgaoExpedidor(String orgaoExpedidor)
    {
        this.orgaoExpedidor = orgaoExpedidor;
    }

    public String getPai()
    {
        return pai;
    }

    public void setPai(String pai)
    {
        this.pai = pai;
    }

    public String getPisPasep()
    {
        return pisPasep;
    }

    public void setPisPasep(String pisPasep)
    {
        this.pisPasep = pisPasep;
    }

    public String getRg()
    {
        return rg;
    }

    public void setRg(String rg)
    {
        this.rg = rg;
    }

    public String getSexo()
    {
        return sexo;
    }

    public void setSexo(String sexo)
    {
        this.sexo = sexo;
    }

    public String getSituacao()
    {
        return situacao;
    }

    public void setSituacao(String situacao)
    {
        this.situacao = situacao;
    }

    public String getTelefone1()
    {
        return telefone1;
    }

    public void setTelefone1(String telefone1)
    {
        this.telefone1 = telefone1;
    }

    public String getTelefone2()
    {
        return telefone2;
    }

    public void setTelefone2(String telefone2)
    {
        this.telefone2 = telefone2;
    }

    public String getTipoSanguineo()
    {
        return tipoSanguineo;
    }

    public void setTipoSanguineo(String tipoSanguineo)
    {
        this.tipoSanguineo = tipoSanguineo;
    }

    public String getTituloEleitoral()
    {
        return tituloEleitoral;
    }

    public void setTituloEleitoral(String tituloEleitoral)
    {
        this.tituloEleitoral = tituloEleitoral;
    }

    public Endereco getEndereco()
    {
        return endereco;
    }

    public void setEndereco(Endereco endereco)
    {
        this.endereco = endereco;
    }

    public Instituicao getInstituicao()
    {
        return instituicao;
    }

    public void setInstituicao(Instituicao instituicao)
    {
        this.instituicao = instituicao;
    }

    public Foto getFoto()
    {
        return foto;
    }

    public void setFoto(Foto foto)
    {
        this.foto = foto;
    }

    public Cargo getCargo()
    {
        return cargo;
    }

    public void setCargo(Cargo cargo)
    {
        this.cargo = cargo;
    }

    public Funcao getFuncao()
    {
        return funcao;
    }

    public void setFuncao(Funcao funcao)
    {
        this.funcao = funcao;
    }

    public Setor getSetor()
    {
        return setor;
    }

    public void setSetor(Setor setor)
    {
        this.setor = setor;
    }

    public String getCadastroVeiculo()
    {
        return cadastroVeiculo;
    }

    public void setCadastroVeiculo(String cadastroVeiculo)
    {
        this.cadastroVeiculo = cadastroVeiculo;
    }

    public String getDescricaoVeiculo()
    {
        return descricaoVeiculo;
    }

    public void setDescricaoVeiculo(String descricaoVeiculo)
    {
        this.descricaoVeiculo = descricaoVeiculo;
    }

    public String getPlacaVeiculo()
    {
        return placaVeiculo;
    }

    public void setPlacaVeiculo(String placaVeiculo)
    {
        this.placaVeiculo = placaVeiculo;
    }

    public Date getDataDesligamento() {
        return dataDesligamento;
    }

    public void setDataDesligamento(Date dataDesligamento) {
        this.dataDesligamento = dataDesligamento;
    }

    public List<Ferias> getFerias() {
        return ferias;
    }

    public void setFerias(List<Ferias> ferias) {
        this.ferias = ferias;
    }            
}

FERIAS:

[code]package catalogo.modelo;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

@Entity
@Table(name = “ferias”, schema = “catalogo”)
public class Ferias implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id_ferias")
private int idFerias;                    

@Column(name="tipo")
private String tipo;
        
@Column(name="exercicio")
private int exercicio;

@Column(name="periodo1")
private int periodo1;

@Column(name="inicio1")
@Temporal(TemporalType.DATE)
private Date inicio1;

@Column(name="periodo2")
private int periodo2;

@Column(name="inicio2")
@Temporal(TemporalType.DATE)
private Date inicio2;

private String obs;      

/*@ManyToMany(fetch=FetchType.LAZY) 
@JoinTable(name="colaborador_ferias", schema="catalogo", 
           joinColumns={@JoinColumn(name="id_ferias")}, 
           inverseJoinColumns={@JoinColumn(name="id_colaborador")}) 
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private Collection<Colaborador> colaboradores;*/                             

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)      
@JoinTable(name="colaborador_ferias", schema = "catalogo",     
          joinColumns={@JoinColumn(name="id_ferias")},       
          inverseJoinColumns={@JoinColumn(name="id_colaborador")})      

private List colaboradores;

public Ferias(){
    
}  

public int getExercicio() {
    return exercicio;
}

public void setExercicio(int exercicio) {
    this.exercicio = exercicio;
}   

public int getIdFerias() {
    return idFerias;
}

public void setIdFerias(int idFerias) {
    this.idFerias = idFerias;
}

public Date getInicio1() {
    return inicio1;
}

public void setInicio1(Date inicio1) {
    this.inicio1 = inicio1;
}

public Date getInicio2() {
    return inicio2;
}

public void setInicio2(Date inicio2) {
    this.inicio2 = inicio2;
}

public String getObs() {
    return obs;
}

public void setObs(String obs) {
    this.obs = obs;
}

public int getPeriodo1() {
    return periodo1;
}

public void setPeriodo1(int periodo1) {
    this.periodo1 = periodo1;
}

public int getPeriodo2() {
    return periodo2;
}

public void setPeriodo2(int periodo2) {
    this.periodo2 = periodo2;
}

public String getTipo() {
    return tipo;
}

public void setTipo(String tipo) {
    this.tipo = tipo;
}

public List<Colaborador> getColaboradores() {
    return colaboradores;
}

public void setColaboradores(List<Colaborador> colaboradores) {
    this.colaboradores = colaboradores;
}        

}
[/code]

ACTION:

package catalogo.controle.actions;

import catalogo.controle.forms.FeriasForm;
import catalogo.dao.GenericDAO;
import catalogo.modelo.Colaborador;
import catalogo.modelo.Ferias;
import catalogo.util.ConverterData;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.*;

public class CadastrarFeriasAction extends Action
{
    private String retorno;
    private String msg;      

    public CadastrarFeriasAction(){
    }

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
        throws Exception
    {        
        FeriasForm feriasForm = (FeriasForm)form;
        
        Colaborador colaborador = new Colaborador();                
        Ferias ferias = new Ferias();
                
        /*int idColaborador = Integer.parseInt(feriasForm.getIdColaborador());
        GenericDAO colaboradorDao = new GenericDAO(Colaborador.class);
        colaborador = (Colaborador) colaboradorDao.carregarPeloId(idColaborador);   
        
        colaborador.setFerias(new ArrayList<Ferias>());
        
        ferias.setTipo(feriasForm.getTipo());
        ferias.setExercicio(Integer.parseInt(feriasForm.getExercicio()));
        ferias.setPeriodo1(Integer.parseInt(feriasForm.getPeriodo1()));
        ferias.setInicio1(ConverterData.converteData(feriasForm.getInicio1()));        
        ferias.setPeriodo2(Integer.parseInt(feriasForm.getPeriodo2()));
        ferias.setInicio2(ConverterData.converteData(feriasForm.getInicio2()));        
        ferias.setObs(feriasForm.getObs());
        ferias.setColaboradores(new ArrayList<Colaborador>());  */              
                
        GenericDAO colaboradorDao = new GenericDAO(Colaborador.class);
        colaborador = (Colaborador) colaboradorDao.carregarPeloId(52);   
        
        colaborador.setFerias(new ArrayList<Ferias>());
        
        ferias.setTipo("Oficial");
        ferias.setExercicio(Integer.parseInt("2011"));
        ferias.setPeriodo1(Integer.parseInt("15"));
        ferias.setInicio1(ConverterData.converteData("21/10/2011"));        
        ferias.setPeriodo2(Integer.parseInt("15"));
        ferias.setInicio2(ConverterData.converteData("15/12/2001"));        
        ferias.setObs("teste");
        
        ferias.setColaboradores(new ArrayList<Colaborador>());
        
        colaborador.getFerias().add(ferias);                         
        ferias.getColaboradores().add(colaborador); 
                      
        GenericDAO dao = new GenericDAO(Ferias.class);                       
              
        try {
            dao.salvar(colaborador);
            retorno = "sucesso";
            msg = "As f&eacute;rias do funcion&aacute;rio foram cadastradas com sucesso!";
        } 
        catch (Exception e) {                     
            retorno = "erro";    
            msg = "Não foi possível salvar as férias do funcionário! " + e.getMessage().toString();             
            e.printStackTrace();  
        }          
        
        request.setAttribute("msg", msg);
        
        return mapping.findForward(retorno);
    }
}

ACTIONFORM:

package catalogo.controle.forms;

import org.apache.struts.action.ActionForm;

public class FeriasForm extends ActionForm {
    
    //private int idFerias;
    private String idColaborador;
    private String tipo;
    //private int exercicio;
    private String exercicio;
    private String periodo1;
    private String inicio1;
    private String periodo2;
    private String inicio2;  
    private String obs;

    public FeriasForm(){
    }

    public String getExercicio() {
        return exercicio;
    }

    public void setExercicio(String exercicio) {
        this.exercicio = exercicio;
    }       

    public String getIdColaborador() {
        return idColaborador;
    }

    public void setIdColaborador(String idColaborador) {
        this.idColaborador = idColaborador;
    }  

    public String getInicio1() {
        return inicio1;
    }

    public void setInicio1(String inicio1) {
        this.inicio1 = inicio1;
    }

    public String getInicio2() {
        return inicio2;
    }

    public void setInicio2(String inicio2) {
        this.inicio2 = inicio2;
    }

    public String getObs() {
        return obs;
    }

    public void setObs(String obs) {
        this.obs = obs;
    }

    public String getPeriodo1() {
        return periodo1;
    }

    public void setPeriodo1(String periodo1) {
        this.periodo1 = periodo1;
    }

    public String getPeriodo2() {
        return periodo2;
    }

    public void setPeriodo2(String periodo2) {
        this.periodo2 = periodo2;
    } 

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }       
}

cara,
nao consegui identificar o erro, vc vai ter que pegar o log de erro msm, para ver o que está acontecendo.

t+

Beleza,

Tambem não estou conseguindo achar o erro. Estou tetando usar o log4j, mas não estou conseguindo. Basta eu colocar o jar dentro das bibliotecas e depois o log4j.propertiers eu coloco onde?

segue um link para configuração, http://faq.infolink.com.br/Log4J

cara, qual IDE e servidor vc ta usando? esse seu projeto ta muito estranho, para não estar aparecendo o log de erro.

t+

Esse projeto está estranho em vários aspectos.

Eu esto usando o NetBeans 7.0.1 e o Tomcat 7.0.14

Não estou conseguindo colocar o log4j para rodar, o pior é que já rodava no projeto antes.

Criei o arquivo log4j.properties, dentro do diretorio WEB-INF, assim:

log4j.rootLogger=ALL
log4j.logger.teste=ALL
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %-5p %c{2} %M.%L %x - %m\n
log4j.appender.A1.file=/web/logs/log.txt

Coloquei o jar dentro das bibliotecas.

E no Action, fiz isso:

 private Logger logger;
 logger = Logger.getLogger("teste");

try {
            dao.salvar(colaborador);
            retorno = "sucesso";
            msg = "As f&eacute;rias do funcion&aacute;rio foram cadastradas com sucesso!";
        } 
        catch (Exception e) {                     
            retorno = "erro";    
            msg = "Não foi possível salvar as férias do funcionário! " + e.getMessage().toString();             
            e.printStackTrace();  
            logger.info(e.getMessage());
        }    

Não está funcionando, o arquivo log.txt está vazio, nenhum erro aparece e não sei qual o caminho que coloco aqui: log4j.appender.A1.file (no log4j.properties)

cara,

vc ja deu uma verificada no log na pasta do tomcat, para ver se está sendo impresso o erro la.

t+

Acabei de ver e a pasta de logs do tomcat está vazia hehehehe.
Vou ver o que faço aqui, posso ter modelado errado esse relacionamento tambem, talvez seja um para muitos, vou rever com calma

Obrigado mesmo pela ajuda.
Vou continuar tentando e posto aqui.

Mudei o relacionamento para 1:N, só que continua dando o mesmo erro.
Agora consegui ver algumas coisas no log do Apache, não sei se vai ajudar.

COLABORADOR:

@OneToMany(mappedBy = "colaborador")
    private List<Ferias> ferias;

FERIAS:

@Entity
@Table(name = "ferias", schema = "catalogo")
public class Ferias implements Serializable {
        
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id_ferias")
    private int idFerias; 
    
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "id_colaborador", referencedColumnName = "id_colaborador", insertable = true, updatable = true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.PERSIST)        
    private Colaborador colaborador;
      
    @Column(name="tipo")
    private String tipo;
            
    @Column(name="exercicio")
    private int exercicio;
    
    @Column(name="periodo1")
    private int periodo1;
    
    @Column(name="inicio1")
    @Temporal(TemporalType.DATE)
    private Date inicio1;
    
    @Column(name="periodo2")
    private int periodo2;
    
    @Column(name="inicio2")
    @Temporal(TemporalType.DATE)
    private Date inicio2;
    
    private String obs;     

BANCO DE DADOS
Colaborador: não tem nada de ferias
Ferias: id_ferias, id_colaborador(que se relaciona com o id da tabela colaborador), tipo, periodo1. etc…

ACTION:

        Colaborador colaborador = new Colaborador();                
        Ferias ferias = new Ferias();                      
        
        ferias.setTipo(feriasForm.getTipo());
        ferias.setExercicio(Integer.parseInt(feriasForm.getExercicio()));
        ferias.setPeriodo1(Integer.parseInt(feriasForm.getPeriodo1()));
        ferias.setInicio1(ConverterData.converteData(feriasForm.getInicio1()));        
        ferias.setPeriodo2(Integer.parseInt(feriasForm.getPeriodo2()));
        ferias.setInicio2(ConverterData.converteData(feriasForm.getInicio2()));        
        ferias.setObs(feriasForm.getObs());
        ferias.setColaboradores(new ArrayList<Colaborador>());  */              
                
        GenericDAO colaboradorDao = new GenericDAO(Colaborador.class);
        colaborador = (Colaborador) colaboradorDao.carregarPeloId(52);                  
        ferias.setColaborador(colaborador);
        
        ferias.setTipo("Oficial");
        ferias.setExercicio(Integer.parseInt("2011"));
        ferias.setPeriodo1(Integer.parseInt("15"));
        ferias.setInicio1(ConverterData.converteData("21/10/2011"));        
        ferias.setPeriodo2(Integer.parseInt("15"));
        ferias.setInicio2(ConverterData.converteData("15/12/2001"));        
        ferias.setObs("teste");
                        
        colaborador.getFerias().add(ferias);  

       GenericDAO dao = new GenericDAO(Ferias.class);                   
               
        try {
            dao.salvar(ferias);
            retorno = "sucesso";
            msg = "As f&eacute;rias do funcion&aacute;rio foram cadastradas com sucesso!";
        } 
        catch (Exception e) {                     
            retorno = "erro";    
            msg = "Não foi possível salvar as férias do funcionário! " + e.getMessage().toString();             
            e.printStackTrace();              
        }      

LOG DO APACHE:

Não entendi o primeiro erro do log, não tenho nenhuma anotação Column no campo colaborador da minha classe Ferias.

CONSEGUI!

Achei o erro, finalmente. Desculpa incomodar tanto, e pior, por uma bobeira, o campo id_ferias, no BD, não estava como auto increment. Era só isso. Depois de várias mudanças, cheguei a esse ultimo erro e consertei, aí funcionou. Que bobeira. Desculpem mesmo.

Culpa da nova interface do MySql Administrator, que agora é MySql Workbench, não gostei nenhum pouco, to quebrando a cabeça direto pra fazer coisas simples, como por exemplo, colocar um campo como AI, o que geralmente já é padrão quando se cria prymary keys em tabelas. Muto fraquinho esse novo SGBD.

Obrigado por tudo, mais uma vez.

Abraço.

bom q resolveu, :smiley:

cara mas da um olhada nesse ambiente de desenvolvimento, pois nao é normal não aparecer o log de erro, pq vc vai ter dificuldade em trabalhar.

marque o poste como resolvido.

t+

Pois é, vc tem toda razão. Pode deixar que vou colocar o log4j para rodar, por enquanto estou usando o do apache mesmo.

Valeu pelas dicas.

Abração. Tudo de bom.