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.
Problema persistência JPA campo não nulo passado nulo
C
8 Respostas
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();
}
}
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?
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?
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