Oi gente,
Andei pesquisando Google a fora e pelos fóruns e não achei uma solução que me ajudasse. Tenho meu projeto web, usando Jsf 2.0, primefaces 3.2 e JPA 2.0
Estou querendo salvar um objeto Organização no banco, e uma organização possui um gestor, que é um objeto do tipo Usuário. Certo, quando tento salvar, ocorre a seguinte exceção: org.hibernate.PropertyValueException: not-null property references a null or transient value: modelo.Usuario.email
Creio que eles esteja tentando salvar um usuário antes de salvar a organização, só que eu já possuo os usuários cadastrados e só queria associar um deles à organização que está sendo salva, só que sem sucesso.
Organização:
[code]@Entity
@Table(name=“organizacao”)
public class Organizacao {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id", nullable=false)
private int id;
@Column(name="cnpj", nullable=false)
private String cnpj;
@Column(name="nome_fantasia", nullable=false)
private String nomeFantasia;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn
private Usuario gestor;
@OneToMany(fetch=FetchType.EAGER)
private List<Usuario> usuarios;
[/code]
Uusário:
@Entity
@Table(name="usuario")
public class Usuario {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id", nullable=false)
private int id;
@Column(name="matricula", nullable=false)
private String matricula;
@Column(name="gestor", nullable=false)
private boolean gestor;
@Column(name="nome", nullable=false)
private String nome;
@Column(name="funcao")
private String funcao;
@Column(name="setor")
private String setor;
@Column(name="cargo")
private String cargo;
@Column(name="email", nullable=false)
private String email;
@Column(name="senha", nullable=false)
private String senha;
Minha classe Converter, para trabalhar com o selectOneMenu da tela:
[code]@FacesConverter(“StringConverter”)
public class UsuarioConverter implements Converter {
@Override
public Object getAsObject(FacesContext facesContext,
UIComponent uiComponent, String usuarioObj) {
if (usuarioObj != null && !usuarioObj.equals("")) {
String usuario = String.valueOf(usuarioObj);
try {
UsuarioDao dao = new UsuarioDao();
return dao.listarUm(usuario);
} catch (Exception e) {
throw new ConverterException(
"Nao foi possivel converter Usuário:" + usuarioObj
+ "." + e.getMessage());
}
}
return null;
}
@Override
public String getAsString(FacesContext facesContext,
UIComponent uiComponent, Object object) {
if (object != null) {
return object.toString();
} else {
return "";
}
}[/code]
E finalmente, minha OrganizacaoControle:
[code]@ManagedBean
@SessionScoped
public class OrganizacaoControle {
private Organizacao organizacao;
private Usuario gestor;
private OrganizacaoDao dao = new OrganizacaoDao();
private List<Organizacao> organizacoes = new ArrayList<Organizacao>(dao.listar());
public OrganizacaoControle(){
this.organizacao = new Organizacao();
this.gestor = new Usuario();
}
public void salvar() {
OrganizacaoDao organizacaoDao = new OrganizacaoDao();
organizacao.setGestor(gestor); // esse Gestor é o objeto Usuario retornado da classe Converter. Já vi que ele vem preenchido corretamente.
organizacaoDao.inserir(organizacao);
organizacao = new Organizacao();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Organização: ", "Registro cadastrado com sucesso!"));
}
public List<Organizacao> listar() {
OrganizacaoDao organizacaoDao = new OrganizacaoDao();
organizacoes = new ArrayList<Organizacao>(organizacaoDao.listar());
return organizacoes;
}
public void alterar() {
OrganizacaoDao organizacaoDao = new OrganizacaoDao();
organizacaoDao.alterar(organizacao);
organizacao = new Organizacao();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Organização: ", "Registro alterado com sucesso!"));
}
public void excluir() {
OrganizacaoDao organizacaoDao = new OrganizacaoDao();
organizacaoDao.excluir(organizacao);
organizacao = new Organizacao();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Organização: ", "Registro excluido com sucesso!"));
}
[/code]
Agradeço quem puder me ajudar ^^
