Org.hibernate.exception.ConstraintViolationException

Feras como posso resolver essa exceção

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

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:

o Problema acontece quando vai inserir

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:

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.

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

[=

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

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

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

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

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; 

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:

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