Mapeamento anormal de PK no Hibernate  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
plentz
Moderador
[Avatar]

Membro desde: 28/01/2004 07:34:12
Mensagens: 1584
Localização: Porto Alegre, RS
Offline

Buenas pessoal, dei uma procurada na documentação do Hibernate(e também nas docs do Hibernate Annotations) e não achei nada relacionado ao mapeamento de geradores de PK anormais. Explicando: a classe que preciso mapear tem sua PK gerada através de uma procedure do banco(cadê aquele smile com ânsia de vômito?). Como eu poderia fazer esse mapeamento sem ter que fazer uma grande, gorda e feia gambiarra?

Notas: a procedure (que está num banco INGRES - a boa notícia é que o Hibernate vem com dialect bem atualizadinho pra ele já), que consulta uma tabela de parâmetros, onde cada linha possui um registro que contém o valor da pk. Então sim, a procedure consulta o valor, guarda numa variável, faz update pra n+1, e commita. *altamente* escalável.

Diego Plentz - Twitter
"Provide options, don't make lame excuses."
[Email] [WWW]
Daniel Quirino Oliveira
Moderador
[Avatar]

Membro desde: 23/03/2003 23:57:34
Mensagens: 3299
Localização: Awawawawa (Araraquara) - SP
Offline

Ouch! Que coisa mais incomum. Enfim, tente estas duas estratégias:
tente usar @GeneratedValue(strategy=GenerationType.SEQUENCE ...)
ou então, tente usar as Hibernate Annotation Extensions, usando o "select" como gerador (aliás, tentaria esta última estratégia primeiro).


Daniel Quirino Oliveira
[Email] [WWW]
Lucashgt
Virtual Machine Man

Membro desde: 20/06/2003 20:25:41
Mensagens: 511
Localização: BR
Offline

O que pode ser feito também é gerar um próprio Generator.

Lucas H. G. Toniazzo
Vraptor
blog
[Email] [WWW] [MSN] [ICQ]
Daniel Quirino Oliveira
Moderador
[Avatar]

Membro desde: 23/03/2003 23:57:34
Mensagens: 3299
Localização: Awawawawa (Araraquara) - SP
Offline

Lucashgt wrote:O que pode ser feito também é gerar um próprio Generator.


Sim, mas em último caso (no caso de desespero, por exemplo).

Daniel Quirino Oliveira
[Email] [WWW]
Daniel Quirino Oliveira
Moderador
[Avatar]

Membro desde: 23/03/2003 23:57:34
Mensagens: 3299
Localização: Awawawawa (Araraquara) - SP
Offline

plentz wrote:Buenas pessoal, dei uma procurada na documentação do Hibernate(e também nas docs do Hibernate Annotations) e não achei nada relacionado ao mapeamento de geradores de PK anormais. Explicando: a classe que preciso mapear tem sua PK gerada através de uma procedure do banco(cadê aquele smile com ânsia de vômito?). Como eu poderia fazer esse mapeamento sem ter que fazer uma grande, gorda e feia gambiarra?


Ahhh!! Ignore a primeira estratégia! Tente usar o generator "assigned" (usando as Hibernate Annotations Extensions): http://www.hibernate.org/hib_docs/v3/reference/en/html_single/#mapping-declaration-id

Daniel Quirino Oliveira
[Email] [WWW]
plentz
Moderador
[Avatar]

Membro desde: 28/01/2004 07:34:12
Mensagens: 1584
Localização: Porto Alegre, RS
Offline

Boa Daniel. Por sinal, é o mapeamento default,hehe.

** diego procura serra elétrica para brincar com ser que teve a brilhante idéia de criar uma procedure que atualiza uma sequence em uma tabela(!!) e devolve o valor.

Diego Plentz - Twitter
"Provide options, don't make lame excuses."
[Email] [WWW]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Caramba

Quando agente acha que já viu de tudo, sempre tem coisa pior, pra quê o cara tá atualizando uma sequence no braço....

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
plentz
Moderador
[Avatar]

Membro desde: 28/01/2004 07:34:12
Mensagens: 1584
Localização: Porto Alegre, RS
Offline

Maurício Linhares wrote:Caramba

Quando agente acha que já viu de tudo, sempre tem coisa pior, pra quê o cara tá atualizando uma sequence no braço....


Não duvide nunca da capacidade de uma ameba no cargo de programador

Diego Plentz - Twitter
"Provide options, don't make lame excuses."
[Email] [WWW]
plentz
Moderador
[Avatar]

Membro desde: 28/01/2004 07:34:12
Mensagens: 1584
Localização: Porto Alegre, RS
Offline

Buenas, problema solucionado. Após pesquisar pelas alternativas (que não eram muitas, por sinal), chegamos em duas que seriam as mais "coerentes":

- Seguindo a linha de raciocínio que o Quirino sugeriu (de permitir que a aplicação controlasse a pk), seria um pouco (ok, seria uma enorme gambiarra feia e fedida), pois teriamos que criar um singleton da vida e fazer referência sempre. Maior trabalho pros desenvolvedores, resumindo, no way.

- A segunda, que foi a adotada. Criamos (eu+Cuozzo+Lucas que agora trabalha comigo ) um gerador próprio que implementa IdentifierGenerator. Não ficou a coisa mais linda do mundo, mas ficou decente. A implementação da classe ficou algo próximo disto:



E um exemplo de como ficou a utilização:


Diego Plentz - Twitter
"Provide options, don't make lame excuses."
[Email] [WWW]
brlima
Moderador
[Avatar]

Membro desde: 12/05/2003 14:03:38
Mensagens: 1537
Localização: São Paulo - SP
Offline

Não é por nada não, mas isso e bem comum dos lugares que eu venho...rsss.. apesar de ser coisa do outro mundo e feio, nao sei pq tem gente que adora fazer isso... mas....


Bruno R. Lima
-------------------------------------------
flickr :: twitter
[MSN]
vskuroda
Thread.start()
[Avatar]

Membro desde: 02/06/2006 09:35:23
Mensagens: 28
Localização: Maringá
Offline

Opa.. caros colegas.

Descupe, por acaso há um modo mais simples de se colocar um Auto Incremento na minha PK, pois quando realizado um cadastro não consigo gerar. Estou usando Hibernate + Annotations + JSF

Atenciosamente Valter
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team