Problema persistência JPA campo não nulo passado nulo

8 respostas
C

Galera não sei se vocês já tiveram um problema desses. Estou usando Hibernate+Postgres, e estava persistindo minhas classes beleza. Mas tem uma classe que não consigo persistir. Eu populo ela certinho, até os campos nulos e quando dou o persist() dá erro q o campo data não pode ser nulo. Mas já debuguei, vi q o persist recebe o objeto certinho, com tudo preenchido. Como que pode estar falando que tem campo nulo? Alguém me ajuda.
Dica: Na minha aplicação eu instancio apenas uma Factory e um EntityManager(singleton). Mas quando eu passei a instanciar vários EntityManagers(a cada chamada na DAO) eu consegui persistir.

8 Respostas

Hebert_Coelho

Como você mapeou seu campo de data?

C
@Entity
public class Reserva implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue (strategy = GenerationType.AUTO)
    private Long id;
    
    @Column(nullable=false)
    @Temporal(javax.persistence.TemporalType.TIME)
    private Date horaInicial;
    
    @Column(nullable=false)
    @Temporal(javax.persistence.TemporalType.TIME)
    private Date horaFinal;
    
    @Column(nullable=false)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Calendar dataInicial;
    
    @Column(nullable=false)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Calendar dataFinal;
    
    @Column(nullable=false)
    private Boolean quinzenal;
    
    @Enumerated(EnumType.STRING)
    @Column(nullable=false)
    private TipoReserva tipo;

    @Enumerated(EnumType.STRING)
    @Column(nullable=false)
    private DiaSemana diasemana;
        
    @ManyToMany
    private Set<Usuario> usuarioExtras;
    
    @ManyToOne(optional=false)
    private Sala salaHorario;
    
    @ManyToOne(optional=true)
    private Turma turmaReserva;

    public Boolean getQuinzenal() {
        return quinzenal;
    }

    public void setQuinzenal(Boolean quinzenal) {
        this.quinzenal = quinzenal;
    }

    public Turma getTurmaReserva() {
        return turmaReserva;
    }

    public void setTurmaReserva(Turma turmaReserva) {
        this.turmaReserva = turmaReserva;
    }
       
    public DiaSemana getDiasemana() {
        return diasemana;
    }

    public void setDiasemana(DiaSemana diasemana) {
        this.diasemana = diasemana;
    }
    
    public TipoReserva getTipo() {
        return tipo;
    }

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

    public Set<Usuario> getUsuarioExtras() {
        return usuarioExtras;
    }

    public void setUsuarioExtras(Set<Usuario> usuarioExtras) {
        this.usuarioExtras = usuarioExtras;
    }
    
       
    public Calendar getDataFinal() {
        return dataFinal;
    }

    public void setDataFinal(Calendar dataFinal) {
        this.dataFinal = dataFinal;
    }

    public Calendar getDataInicial() {
        return dataInicial;
    }

    public void setDataInicial(Calendar dataInicial) {
        this.dataInicial = dataInicial;
    }

    public Date getHoraFinal() {
        return horaFinal;
    }

    public void setHoraFinal(Date horaFinal) {
        this.horaFinal = horaFinal;
    }

    public Date getHoraInicial() {
        return horaInicial;
    }

    public void setHoraInicial(Date horaInicial) {
        this.horaInicial = horaInicial;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
   
    public Sala getSalaHorario() {
        return salaHorario;
    }

    public void setSalaHorario(Sala salaHorario) {
        this.salaHorario = salaHorario;
    }
   
    @Override
    public int hashCode(){
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }
    
    @Override
    public boolean equals(Object object){
        if (!(object instanceof Reserva)){
            return false;
        }
        Reserva other = (Reserva) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))){
            return false;
        }
        return true;
    }
    
    @Override
    public String toString()
    {
        SimpleDateFormat df = new SimpleDateFormat();
        df.applyPattern("HH:mm");
        StringBuilder build = new StringBuilder("");
        build.append(diasemana.name());
        build.append(" das ");
        build.append(df.format(horaInicial.getTime()));
        build.append(" às ");
        build.append(df.format(horaFinal.getTime()));
        build.append(" Sala: ").append(salaHorario.getNum().toString());
        return build.toString();
        
    }
}
Hebert_Coelho

Pera aí, você ta querendo utilizar um entitymanager para toda a aplicação? É isso mesmo?

C

Então, como sou iniciante não sei se é certo. Parece mais fácil pois se eu instancio a cada chamada as vezes quando vou usar um objeto da erro pq não está attached ao Entity. Como seria o jeito certo?

Hebert_Coelho

coutovdk:
Então, como sou iniciante não sei se é certo. Parece mais fácil pois se eu instancio a cada chamada as vezes quando vou usar um objeto da erro pq não está attached ao Entity. Como seria o jeito certo?
Deixei o factory estático e ele irá criar entityManagers de instância.
O objeto não estar attached não tem nada haver com ser ou não um entityManager estático, mas sim com má utilização.

Leia esse livro, ele é excelente: http://www.amazon.com/Pro-JPA-Mastering-Persistence-Technology/dp/[telefone removido]/ref=sr_1_1?ie=UTF8&qid=[telefone removido]&sr=8-1&keywords=jpa+2+pro

C

Então, eu segui um tutorial e pra mim é fácil utilizar vários Entities, vou experimentar desse jeito. Mas só me responda uma pergunta, quais são as vantagens de usar vários Entities ao invés de um?

Hebert_Coelho

coutovdk:
Então, eu segui um tutorial e pra mim é fácil utilizar vários Entities, vou experimentar desse jeito. Mas só me responda uma pergunta, quais são as vantagens de usar vários Entities ao invés de um?
Não é vantagem, é o correto.
Leia o livro (ou qualquer outro material) para entender. [=

C

Beleza! Obrigado pela ajuda!

Criado 26 de julho de 2012
Ultima resposta 26 de jul. de 2012
Respostas 8
Participantes 2