[RESOLVIDO] Auto incremente no Firebird com Hibernate...  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
root_
JavaGuru
[Avatar]

Membro desde: 05/09/2006 15:46:19
Mensagens: 206
Localização: Gurupi - Tocantins
Offline

Olhei um pouco na net sobre isso, inclusive claro aqui no forum, mais n satisfeito com "quebra galho", estou postando minha soluçao!
Consideraçoes:
- Estou usando Firebird em modo SuperServer versao 2.0.3 (winXP).
- JDK 6.0 update 3.
- Hibernate Annotations.

CLASSE HIBERNATE_ UTIL:




=============================================================================
Sabemos que no Firebird para criar um campo AUTOINCREMENT é preciso criar um GENERATOR para o ID (que é pra ser automatico o incremento)
e uma trigger para executá-lo toda vez que algo for inserido no DB.
No caso de usar o Hibernate, não é preciso criar a trigger, pq ele vai fazer essa computação de incrementar o GENERATOR.

Agora a parte do código em questao (a do auto increment) na minha classe mapeada:



E agora, por fim a classe ClienteDAO, que é minha interface de controle entre Obj Cliente e tabela Cliente do DB.
Ainda em construçao a classe, mais o que interessa ja está pronto. Que é o rollback do generator caso aconteça um erro ao Salvar um novo registro no DB. Foi necessario a criaçao desse rollBackID porque, quando na tentativa de salvar um novo obj no DB, a primeira coisa a ser calculado é o campo de "auto increment", a segunda é realiar a persistencia. Se ocorrer erro na persistencia, ele n volta o GENERATPOR (rollBack do calculo do Generator para o proximo valor). Isso causa furos no sequenciamento do ID.

Caso aconteça algum Excepiton no método salve() no seu código, utilize o método rollBak() que está na classe abaixo .




qualquer dúvida, estamos ai!

This message was edited 1 time. Last update was at 14/02/2012 10:46:36


Rogério Milhomens de Queiroz
Agile - Consultoria em Tecnologia da Informação!
http://www.agilecti.com.br
Dataview - Inteligência em Tecnologia!
http://www.dataview.com.br
[Email] [WWW] [MSN]
targas
Thread.start()
[Avatar]

Membro desde: 11/04/2010 21:58:35
Mensagens: 27
Localização: Recife-PE
Offline

NO meu caso, tenho um sistema multi empresas, desta forma a chave é gerada num trigger sem generator conforme abaixo:

CREATE OR ALTER TRIGGER TBA_MOEDAS_BI0 FOR TBA_MOEDAS
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE WID INTEGER;
BEGIN
SELECT MAX(ID) FROM TBA_MOEDAS
WHERE CLIENTE_SISTEMA_ID = NEW.CLIENTE_SISTEMA_ID
INTO WID;

IF (WID IS NULL) THEN
BEGIN
WID = 0;
END

NEW.ID = WID + 1;
END

Como devo fazer as anotações neste caso?
[Email] [MSN]
root_
JavaGuru
[Avatar]

Membro desde: 05/09/2006 15:46:19
Mensagens: 206
Localização: Gurupi - Tocantins
Offline

Neste caso acho que não precisará de definir as anotações referentes ao generator...
já deve resolver...

Rogério Milhomens de Queiroz
Agile - Consultoria em Tecnologia da Informação!
http://www.agilecti.com.br
Dataview - Inteligência em Tecnologia!
http://www.dataview.com.br
[Email] [WWW] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Por favor, ao postar tópicos, não deixe os títulos apenas com letras maiúsculas.

Para conhecer outras regras de netiquetas envolvendo fóruns, leia:
http://www.istf.com.br/perguntas/

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
root_
JavaGuru
[Avatar]

Membro desde: 05/09/2006 15:46:19
Mensagens: 206
Localização: Gurupi - Tocantins
Offline

ViniGodoy wrote:Por favor, ao postar tópicos, não deixe os títulos apenas com letras maiúsculas.

Para conhecer outras regras de netiquetas envolvendo fóruns, leia:
http://www.istf.com.br/perguntas/


Não fui eu quem colocou o título como UPPERCASE.. alias, agora que reparei isso... porém o título do tópico está normal.
Já aparece assim quando clicamos em responder!!!!

Rogério Milhomens de Queiroz
Agile - Consultoria em Tecnologia da Informação!
http://www.agilecti.com.br
Dataview - Inteligência em Tecnologia!
http://www.dataview.com.br
[Email] [WWW] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

O título do tópico está normal agora porque eu corrigi. Mas ele foi aberto em uppercase, por isso o aviso.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team