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

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.

Como você mapeou seu campo de data?

[code]@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();
    
}

}[/code]

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

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?

[quote=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?[/quote]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/1430219564/ref=sr_1_1?ie=UTF8&qid=1342208712&sr=8-1&keywords=jpa+2+pro

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?

[quote=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?[/quote]Não é vantagem, é o correto.
Leia o livro (ou qualquer outro material) para entender. [=

Beleza! Obrigado pela ajuda!