Não consigo persistir meu Objeto JSF

2 respostas
java
Dayson_Rodrigues

estou com pequeno problema aqui na minha persistência, acho que errei alguma coisa.

interface
public interface Clientes {

void adiciona(Cliente t);

void excluir(Cliente t);

void atualiza(Cliente t);

DAO
public class ClienteDAO implements Clientes, Serializable {

private static final long serialVersionUID = 1L;

private EntityManager manager;


public void adiciona(Cliente t) {
	manager.persist(t);
}

public void excluir(Cliente t) {
	manager.remove(manager.merge(t));

}

public void atualiza(Cliente t) {
	manager.merge(t);

}

public Cliente buscaPorId(Integer id) {
	Cliente instancia = manager.find(Cliente.class, id);
	return instancia;
}

public List<Cliente> listaTodos() {
	Query query = manager.createQuery("select c from Cliente c");
	List<Cliente> result = query.getResultList();
	return result;
}

}

public class GestaoCliente implements Serializable {

private static final long serialVersionUID = 1L;

Clientes clientes;

List<Cliente> lista_clientes = new ArrayList<Cliente>();

public GestaoCliente(Clientes clientes) {
	this.clientes = clientes;
}

public void salvar(Cliente cliente) throws RegraNegocioException {
	try {
		if (cliente == null) {
			clientes.adiciona(cliente);
			MensagemUtil.AdicionaMensagem(FacesMessage.SEVERITY_INFO, "Cliente salvo com sucesso!");
		} else {
			clientes.atualiza(cliente);
			MensagemUtil.AdicionaMensagem(FacesMessage.SEVERITY_INFO, "Cliente atualizado com sucesso!");
		}
			cliente = new Cliente();
	} catch (Exception e) {
		throw new RegraNegocioException("Erro ao salvar o cliente");
	}
}

Bean

@Named // anotação CDI que substitui o @ManagedBean
@ViewScoped
public class ClienteBean implements Serializable {

private static final long serialVersionUID = 1L;

private Cliente cliente;
private Integer idCliente;

private Clientes clientes;

GestaoCliente gestaoCliente = new GestaoCliente(clientes);

@PostConstruct
public void init() {
	this.cliente = new Cliente();
}

@Transacional
public void gravar()  {
	try {
		gestaoCliente.salvar(cliente);
	} catch (Exception e) {
		System.out.println("Erro:" + e.getMessage());
		MensagemUtil.AdicionaMensagem(FacesMessage.SEVERITY_ERROR, e.getMessage());
	}
}
Transacao

@SuppressWarnings(serial)

@Transacional

@Interceptor

public class GerenciadorDeTransacao implements Serializable{
@Inject
EntityManager manager;

@AroundInvoke
public Object executaTx(InvocationContext context) throws Exception {
	manager.getTransaction().begin();
	Object resultado = context.proceed(); // continua executando
	manager.getTransaction().commit();
	return resultado;
}

}

Visualizei o log aqui, algo está nullo. no Cliente do meu Bean já estáo com getters e setters;
e imprimir é uma consulta

Hibernate:
select
usuario0_.idUsuario as idUsuari1_2_,
usuario0_.login as login2_2_,
usuario0_.senha as senha3_2_
from
Usuario usuario0_
where
usuario0_.login=?
and usuario0_.senha=?
/Home.xhtml
/cliente/CadastroCliente.xhtml
/cliente/CadastroCliente.xhtml
Errojava.lang.NullPointerException

2 Respostas

lvbarbosa

Dayson, só uma dica que não tem nada a ver com tua pergunta: os métodos de uma interface pública são, por padrão, públicos! Você não precisa colocar public na definição de cada método. Pode fazer assim:

public interface Clientes {
    void adiciona(Cliente t);
    void excluir(Cliente t);
    void atualiza(Cliente t);
}

Agora na hora de implementar, você precisa obrigatoriamente colocar o public, como já está ali no caso de ClienteDAO.

Dayson_Rodrigues

Opa! obrigado aí pela dica.

Criado 8 de fevereiro de 2017
Ultima resposta 8 de fev. de 2017
Respostas 2
Participantes 2