Bom dia!
Tenho uma aplicação com JSF, Spring e Hibernate/JPA…Não estou conseguindo achar o erro que me impede de inserir na tabela, o erro é esse:
29/04/2011 14:47:58 com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback visit
SEVERE: javax.el.ELException: /criar.xhtml @27,59 flowListener="#{criarBean.prepararEtapas}": org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction
Vou postar a classe que estou tentando persistir, assim como o metodo do meu Dao…qualquer coisa só falar que posto mais.
package model;
import java.io.Serializable;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotEmpty;
@Entity
public class MoradiaProd implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Long id;
private int totalpessoas;
private int numComados;
private int numQuartos;
private double metragem;
private int idade;
private String telefone;
private PessoasFamilia familia;
private PessoasEmpregado empregado;
private Piso piso;
private Cobertura cobertura;
private Material material;
private AguaCap aguaCaptacao;
private AguaCan aguaCanalizada;
private AguaCons aguaConsumo;
private AguaDest aguaDestino;
private LocalLavRoupa localLavRoupa;
private InstalSan instalacaoSanitaria;
private BensDeConsumo bensDeConsumo;
private Municipio municipio;
private String rua;
private String bairro;
private String cep;
private int num;
private boolean cidade;
private boolean campo;
public MoradiaProd() {
// TODO Auto-generated constructor stub
}
@Id
@SequenceGenerator(name = "seq", sequenceName = "moradiaprod_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public int getTotalpessoas() {
return totalpessoas;
}
public void setTotalpessoas(int totalpessoas) {
this.totalpessoas = totalpessoas;
}
public int getNumComados() {
return numComados;
}
public void setNumComados(int numComados) {
this.numComados = numComados;
}
public int getNumQuartos() {
return numQuartos;
}
public void setNumQuartos(int numQuartos) {
this.numQuartos = numQuartos;
}
public double getMetragem() {
return metragem;
}
public void setMetragem(double metragem) {
this.metragem = metragem;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
@NotEmpty(message = "{telefone}")
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
@Embedded
public PessoasFamilia getFamilia() {
return familia;
}
public void setFamilia(PessoasFamilia familia) {
this.familia = familia;
}
@Embedded
public PessoasEmpregado getEmpregado() {
return empregado;
}
public void setEmpregado(PessoasEmpregado empregado) {
this.empregado = empregado;
}
@NotNull(message = "{piso}")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_piso", nullable = false)
public Piso getPiso() {
return piso;
}
public void setPiso(Piso piso) {
this.piso = piso;
}
@NotNull(message = "{cobertura}")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_cobertura", nullable = false)
public Cobertura getCobertura() {
return cobertura;
}
public void setCobertura(Cobertura cobertura) {
this.cobertura = cobertura;
}
@NotNull(message = "{material}")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_material", nullable = false)
public Material getMaterial() {
return material;
}
public void setMaterial(Material material) {
this.material = material;
}
@NotNull(message = "{captacao}")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_aguacap", nullable = false)
public AguaCap getAguaCaptacao() {
return aguaCaptacao;
}
public void setAguaCaptacao(AguaCap aguaCaptacao) {
this.aguaCaptacao = aguaCaptacao;
}
@NotNull(message = "{canalizada}")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_aguacan", nullable = false)
public AguaCan getAguaCanalizada() {
return aguaCanalizada;
}
public void setAguaCanalizada(AguaCan aguaCanalizada) {
this.aguaCanalizada = aguaCanalizada;
}
@NotNull(message = "{consumo}")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_aguacons", nullable = false)
public AguaCons getAguaConsumo() {
return aguaConsumo;
}
public void setAguaConsumo(AguaCons aguaConsumo) {
this.aguaConsumo = aguaConsumo;
}
@NotNull(message = "{destino}")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_aguadest", nullable = false)
public AguaDest getAguaDestino() {
return aguaDestino;
}
public void setAguaDestino(AguaDest aguaDestino) {
this.aguaDestino = aguaDestino;
}
@NotNull(message = "{local}")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_locallavroupa", nullable = false)
public LocalLavRoupa getLocalLavRoupa() {
return localLavRoupa;
}
public void setLocalLavRoupa(LocalLavRoupa localLavRoupa) {
this.localLavRoupa = localLavRoupa;
}
@NotNull(message = "{instalacao}")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_instalsan", nullable = false)
public InstalSan getInstalacaoSanitaria() {
return instalacaoSanitaria;
}
public void setInstalacaoSanitaria(InstalSan instalacaoSanitaria) {
this.instalacaoSanitaria = instalacaoSanitaria;
}
@Embedded
public BensDeConsumo getBensDeConsumo() {
return bensDeConsumo;
}
public void setBensDeConsumo(BensDeConsumo bensDeConsumo) {
this.bensDeConsumo = bensDeConsumo;
}
@NotNull(message = "{municipio}")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_municipio", nullable = false)
public Municipio getMunicipio() {
return municipio;
}
public void setMunicipio(Municipio municipio) {
this.municipio = municipio;
}
@NotEmpty(message = "{rua}")
public String getRua() {
return rua;
}
public void setRua(String rua) {
this.rua = rua;
}
@NotEmpty(message = "{bairro}")
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
@NotEmpty(message = "{cep}")
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
@NotEmpty(message = "{num}")
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public boolean isCidade() {
return cidade;
}
public void setCidade(boolean cidade) {
this.cidade = cidade;
}
public boolean isCampo() {
return campo;
}
public void setCampo(boolean campo) {
this.campo = campo;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MoradiaProd other = (MoradiaProd) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "MoradiaProd [id=" + id + "]";
}
}
package dao.impl;
import java.io.Serializable;
import java.util.List;
import java.lang.reflect.ParameterizedType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import dao.Dao;
@Repository
public abstract class DaoImpl<T, ID extends Serializable> implements
Dao<T, ID> {
private Class<T> persistentClass;
@PersistenceContext
protected EntityManager entityManager;
@SuppressWarnings("unchecked")
public DaoImpl() {
this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
public Class<T> getPersistentClass() {
return persistentClass;
}
@Transactional(readOnly = true)
public T loadById(ID id) {
return entityManager.find(persistentClass, id);
}
@Transactional
public void persist(T entity) {
entityManager.persist(entity);
}
@Transactional
public void update(T entity) {
entityManager.merge(entity);
}
@Transactional
public void delete(T entity) {
Object o = entityManager.merge(entity);
entityManager.remove(o);
}
@Transactional(readOnly = true)
@SuppressWarnings("unchecked")
public List<T> loadAll() {
return entityManager.createQuery(
"Select t from " + persistentClass.getSimpleName() + " t")
.getResultList();
}
}
Aqui é como eu faço pra inserir no Meu Bean do JSF…
.......................
/**
* MORADIA PRODUTOR
*/
private MoradiaProdDao moradiaProdDao;
@Resource
public void setMoradiaProdDao(MoradiaProdDao moradiaProdDao){
this.moradiaProdDao = moradiaProdDao;
}
private void salvar(){
this.moradiaProdDao.persist(this.produtor.getMoradiaProdutor());
}
...................
Obrigado.
Filipe.
