Como tratar esse exception?

7 respostas
A

Pessoal, estou com um problema nos meus exceptions.
Quando faço uma inserção violando a UniqueKey, ele dá o seguinte erro:

Hibernate operation: could not insert: [org.tcc.model.Categoria]; 
uncategorized SQLException for SQL [insert into CATEGORIA (VERSION, 
DESCRICAO, IDCATEGORIA) values (?, ?, ?)]; SQL state [HY000]; error 
code [335544665]; GDS Exception. 335544665. violation of PRIMARY or 
UNIQUE KEY constraint "INTEG_209" on table "CATEGORIA"; nested 
exception is org.firebirdsql.jdbc.FBSQLException: GDS Exception. 
335544665. violation of PRIMARY or UNIQUE KEY constraint "INTEG_209" 
on table "CATEGORIA"

O meu exception está assim:

public void salvarCategoria(Categoria categoria) throws CategoriaExistsException {
		try {
		categoriaDao.salvarCategoria(categoria);
		}
		catch (DataIntegrityViolationException e){
			throw new CategoriaExistsException("errors.existing.categoria");
		}
	}

O que devo fazer nesse método para ele tratar aquele erro?

Obrigado

7 Respostas

J

Tente o SQLException.
Espero que ajude :smiley:

A

andrecs2:
vc esta tentando inserir um registro com uma chave primaria que ja existe, vc deve criar um generator( acho q vc ta usando firebird) e adcionar no mapeamento do seu hbm.xml

<id name="codigo" type="integer" column="ATIV_CD_ATIVIDADE"> <generator class="sequence"> <param name="sequence">SEQ_ATIV</param> </generator> </id>

Olá André, eu já estou usando Generator, o problema é qdo insiro uma categoria com o mesmo nome, se for diferente ele insere normanlmente.
Obrigado

A

André
O problema não é deixar ou não inserir, isso o banco não está deixando.
O meu problema é retornar um exception para o usuário dizendo que isso já existe.

Do modo que estou passando o CategoriaExistsException não está mostrando nada para o usuário, somente esse erro do banco. Não uma mensagem entendível por ele.
Thanks

A

java_child:
Tente o SQLException.
Espero que ajude :smiley:

Dá o mesmo erro usando SQLException.

Estava analizando o erro que aparece no console e achei muito estranho.
Parece que ele não reconhece o tipo de Exception…

[tcc] ERROR [http-8080-Processor23] AbstractFlushingEventListener.performExecutions(300) | Could not synchronize database state with session org.hibernate.exception.GenericJDBCException: could not insert: [org.tcc.model.Categoria] at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)

A

Acho que o problema é mesmo entre o Hibernate e o FIrebird.
Configurei para usar com o Mysql e tudo ocorreu normalmente.
Valeu.

D

vc esta tentando inserir um registro com uma chave primaria que ja existe, vc deve criar um generator( acho q vc ta usando firebird) e adcionar no mapeamento do seu hbm.xml

<id name="codigo" type="integer" column="ATIV_CD_ATIVIDADE">
	    <generator class="sequence">
		<param name="sequence">SEQ_ATIV</param>
	    </generator>
	</id>
D

entao vc deve adicionar uma constraint no banco q n permita q tenha duas categorias iguais

Criado 16 de novembro de 2006
Ultima resposta 16 de nov. de 2006
Respostas 7
Participantes 3