Org.hibernate.exception.ConstraintViolationException

12 respostas
R

Feras como posso resolver essa exceção

org.hibernate.exception.ConstraintViolationException: could not insert:

12 Respostas

V

Essa exceção indica que a integridade de uma constraint está sendo violada, algo como tentar deletar um registro que ainda tem relação com outra tabela. Verifique qual registro está sendo removido (se é que é esse o problema) e verifique os associados à ele.

Flw! :thumbup:

R

o Problema acontece quando vai inserir

V

Então pode ser porque você está inserindo um valor duplicado e há uma constraint que proíbe isso, para resolver jogue no banco o sql que o hibernate gera e olhe a mensagem que o banco retorna quando violar a constraint, então é só ver o que está errado no código de inserção.

Flw! :thumbup:

R

Posta o seu método de insert. Pode ter algum problema nele.

Mas é como o von.juliano citou, problemas de duplicidade de chave no banco.

H

Pois é vc ta querendo inserir, exemplo, Cliente ID=9 enquanto no banco já existe alguem com esse ID.

[=

R

Feras

o problema era porque o campo e not null e não tinha setado um valor default para ele por isso o erro

agora que setei um valor default esta resolvido valeu a todos

A

Boa tarde pessoal, me desculpem ressucitar o tópico mas estou com o mesmo problema

Fiz o teste que o von.juliano solicitou:

no meu caso o insert funciona normalmente direto no banco de dados.

Este é o insert gerado pelo Hibernate no console:

Hibernate: 
    select
        voto_.usuario,
        voto_.produto,
        voto_.data as data10_,
        voto_.qtdVoto as qtdVoto10_ 
    from
        VOTO voto_ 
    where
        voto_.usuario=? 
        and voto_.produto=?
Hibernate: 
    insert 
    into
        VOTO
        (data, qtdVoto, usuario, produto) 
    values
        (?, ?, ?, ?)

Meu método

public ActionForward votar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {					
		
			HttpSession session = request.getSession();
			String valor = request.getParameter("produto");
			
			Voto voto = new Voto();			
			voto.setProduto(new Produto());
			voto.getProduto().setCode(Long.parseLong(valor));			
			
			DAOFactory.getVotoDao().saveOrUpdate(voto);			
			
        	return mapping.findForward("voto");			
						
	}

Se alguem puder me dar uma força… vlw

R

Cara ve se os dados que vc esta inserindo já existe no banco

A

Cara meu banco tah zerado! não tem nenhum dado inserido

R

Ace vc tem as chaves primaria ou estrangeira em sua tabela ?
se sim deve ser algo relacionada a elas, tenta adicionar essa anotação no seu codigo

@Id  
@GeneratedValue(strategy=GenerationType.AUTO)  
@Column(name="Idcoluna")  
private long id;
A

olá robsonsan,

Cara, nessa tabela VOTO eu tenho chave as chaves primarias que são:
USUARIO que faz referencia a CPF da tabela USUARIO,
e PRODUTO que faz referencia a CODIGO da tabela PRODUTO

e por isso não posso deixar o campo como auto incremento “@GeneratedValue(strategy=GenerationType.AUTO)” (posso estar falando besteira)

porque cada usuario pode votar somente uma vez em um produto.

minha estrutura está assim:

M

Valeu robsonsan, salvou minha vida ! muito obrigado mesmo :smiley: estava com o memso problema

Criado 6 de agosto de 2010
Ultima resposta 30 de set. de 2013
Respostas 12
Participantes 6