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!