| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/08/2009 13:49:22
|
gigicantador
Debugger
![[Avatar]](/images/avatar/71497f728b86b55d965edbf1849cca8d.jpg)
Membro desde: 06/03/2007 11:35:12
Mensagens: 53
Offline
|
Estrou procurando uma forma de fazer xclusão lógica usando JPA. Alguém sabe se existe alguma annotation ou vou ter que adicionar um campo em todas as minhas queries em que eu quiser recuperar apenas os "não excluídos"?
Por exemplo:
Se houver um meio de eu indicar apra o hibernate que o campo excluido é o campo de exclusão lógica, não preciso colocar "WHERE excluido = false" em todas as minhas queries
|
"Always code as if the person who will maintain your code is a maniac serial killer that knows where you live" |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/08/2009 19:44:21
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
YES! you can!
Todas as Pessoas, através de AbstractPessoa
Apenas as Pessoas Excluidas, através de PessoaExcluida
Apenas as Pessoas não ecluidas, através de Pessoa...
pronto... assim vc consegue relacionar com Pessoa, que é uma entidade que contem apenas os itens não excluidos...
This message was edited 2 times. Last update was at 11/08/2009 19:48:55
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2009 08:43:42
|
gigicantador
Debugger
![[Avatar]](/images/avatar/71497f728b86b55d965edbf1849cca8d.jpg)
Membro desde: 06/03/2007 11:35:12
Mensagens: 53
Offline
|
Valeu MESMO! Vou tentar isso, mas tem cara de que resolve os meus problemas.
Se não rolar dou um feed back aqui no fórum.
|
"Always code as if the person who will maintain your code is a maniac serial killer that knows where you live" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2009 00:00:10
|
gigicantador
Debugger
![[Avatar]](/images/avatar/71497f728b86b55d965edbf1849cca8d.jpg)
Membro desde: 06/03/2007 11:35:12
Mensagens: 53
Offline
|
Só dando um feed back...
A herança não rolou. Tenho muitas entidades no meu sistema e ia ficar inviável triplicá-las só para conseguir fazer a exclusão lógica de forma automática.
Em vez disso encontramos uma annotation do hibernate que facilita as coisas. É a @Where (http://docs.jboss.org/hibernate/stable/annotations/api/org/hibernate/annotations/Where.html) Com ela conseguimos colocar uma cláusula em todas as queries feitas. Outra annotation é a @SQLDelete. Sempre que eu chamar o remove a exclusão será feita de acordo com a regra que eu criar. Por exemplo:
Abraços!
|
"Always code as if the person who will maintain your code is a maniac serial killer that knows where you live" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 08:05:35
|
bbmany
JavaTeenager
![[Avatar]](/images/avatar/8523109c9a85dbfc46eb1f46955b5449.jpg)
Membro desde: 04/12/2007 17:23:24
Mensagens: 188
Offline
|
Olá gigicantador
O seu método de busca/atualização/remoção precisa fazer alguma referência à anotação @Where???
Para ilustrar, este método abaixo retornaria somente as pessoas que não foram excluídas???
Aguardo, enquanto isso vou testar aqui
|
- Brena Monteiro -
Pós-graduanda em Engenharia de Software
Bacharel em Sistemas de Informação.
Tecnóloga em Análise e Desenvolvimento de Sistemas.
Analista e desenvolvedora de sistemas web.
monteirobrena.wordpress.com
Twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 09:29:26
|
bbmany
JavaTeenager
![[Avatar]](/images/avatar/8523109c9a85dbfc46eb1f46955b5449.jpg)
Membro desde: 04/12/2007 17:23:24
Mensagens: 188
Offline
|
Então, respondendo à minha pergunta: Basta acrescentar a anotação @Where e criar um atributo ao qual ela irá se referir
Fica assim:
Dessa forma quando você buscar todas as pessoas ele irá retornar somente as que tiverem ativo igual a 1!!!
|
- Brena Monteiro -
Pós-graduanda em Engenharia de Software
Bacharel em Sistemas de Informação.
Tecnóloga em Análise e Desenvolvimento de Sistemas.
Analista e desenvolvedora de sistemas web.
monteirobrena.wordpress.com
Twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/03/2010 10:53:30
|
tiagomac
JavaTeenager
![[Avatar]](/images/avatar/23d03ac4112de862b36367b92a12104e.jpg)
Membro desde: 15/12/2006 05:38:29
Mensagens: 191
Localização: Salvador, BA
Offline
|
E usando a anotação @Where, se eu desejar através do hibernate retornar todos os objetos que foram removidos por ex. (ativo = 0) ???
Estou com esse problema no momento, desenvolvemos um sistema com o @Where, mas chegou em um ponto em que foi preciso recuperar todos aqueles que estivessem com o ativo = 0...para realizar auditoria... e então, alguém sabe como fazer isso? como dar 1 bypass no @Where???
Abraços!!
|
scjp 6
ocpjwcd 5
"Desconfie do destino e acredite em você. Gaste mais horas realizando que sonhando, fazendo que planejando, vivendo que esperando, porque embora quem quase morre esteja vivo, quem quase vive já morreu" - Luiz Fernando Veríssimo - Cronista e escritor. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/03/2010 11:00:57
|
bbmany
JavaTeenager
![[Avatar]](/images/avatar/8523109c9a85dbfc46eb1f46955b5449.jpg)
Membro desde: 04/12/2007 17:23:24
Mensagens: 188
Offline
|
Falando por alto sem testar:
Já tentou recuperar no banco com uma query que selecione todos com "ativo=0"???
Vou tentar achar uma solução aqui.
Inté
|
- Brena Monteiro -
Pós-graduanda em Engenharia de Software
Bacharel em Sistemas de Informação.
Tecnóloga em Análise e Desenvolvimento de Sistemas.
Analista e desenvolvedora de sistemas web.
monteirobrena.wordpress.com
Twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/03/2010 11:08:46
|
tiagomac
JavaTeenager
![[Avatar]](/images/avatar/23d03ac4112de862b36367b92a12104e.jpg)
Membro desde: 15/12/2006 05:38:29
Mensagens: 191
Localização: Salvador, BA
Offline
|
bbmany wrote:Falando por alto sem testar:
Já tentou recuperar no banco com uma query que selecione todos com "ativo=0"???
Vou tentar achar uma solução aqui.
Inté 
Testado... também não funcionou, tentei também "where active = 0 or active = 1" e também não funcionou ! parece que ele só retorna o que tiver o active = 1... já usei também diretamente "where active = 0" e não retorna nada :O!!
Mais alguma idéia? eu posso testar aqui... preciso de uma solução para isso, já rodei o google todo, não encontro nada... !
|
scjp 6
ocpjwcd 5
"Desconfie do destino e acredite em você. Gaste mais horas realizando que sonhando, fazendo que planejando, vivendo que esperando, porque embora quem quase morre esteja vivo, quem quase vive já morreu" - Luiz Fernando Veríssimo - Cronista e escritor. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/03/2010 11:15:17
|
bbmany
JavaTeenager
![[Avatar]](/images/avatar/8523109c9a85dbfc46eb1f46955b5449.jpg)
Membro desde: 04/12/2007 17:23:24
Mensagens: 188
Offline
|
Também testei e nada ainda.
Estou pesquisando, se achar algo eu posto
Inté
|
- Brena Monteiro -
Pós-graduanda em Engenharia de Software
Bacharel em Sistemas de Informação.
Tecnóloga em Análise e Desenvolvimento de Sistemas.
Analista e desenvolvedora de sistemas web.
monteirobrena.wordpress.com
Twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/03/2010 16:06:03
|
bbmany
JavaTeenager
![[Avatar]](/images/avatar/8523109c9a85dbfc46eb1f46955b5449.jpg)
Membro desde: 04/12/2007 17:23:24
Mensagens: 188
Offline
|
Nada ainda???
Estou quebrando cabeça aqui...
Implementei a exclusão lógica do Hibernate, mas não está ajudando pois pra salvar o próximo registro eu pego o código do último e continuo a sequência, sendo que este código é único.
Entretanto com a exclusão lógica a busca traz o valor do último cadastrado não excluído. Então ele tenta salvar com o próximo valor e dá erro de chave duplicada...
Alguém ai sabe como resolver???
|
- Brena Monteiro -
Pós-graduanda em Engenharia de Software
Bacharel em Sistemas de Informação.
Tecnóloga em Análise e Desenvolvimento de Sistemas.
Analista e desenvolvedora de sistemas web.
monteirobrena.wordpress.com
Twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/03/2010 16:30:36
|
tiagomac
JavaTeenager
![[Avatar]](/images/avatar/23d03ac4112de862b36367b92a12104e.jpg)
Membro desde: 15/12/2006 05:38:29
Mensagens: 191
Localização: Salvador, BA
Offline
|
bbmany wrote:Nada ainda???
Estou quebrando cabeça aqui...
Implementei a exclusão lógica do Hibernate, mas não está ajudando pois pra salvar o próximo registro eu pego o código do último e continuo a sequência, sendo que este código é único.
Entretanto com a exclusão lógica a busca traz o valor do último cadastrado não excluído. Então ele tenta salvar com o próximo valor e dá erro de chave duplicada...
Alguém ai sabe como resolver???
Então, isso aqui no projeto estava gerando uma grande dor de cabeça, tentamos entrar em contato até com o criador dessa anotação, o Emmanuel Bernard, autor do livro Hibernate Search in Action... mas não obtive retorno... em conversa com um arquiteto nosso ele me disse que era impossível fazer um bypass no @Where ! que havia saido um artigo recente sobre isso e que no próprio artigo mencionava o cuidado no uso por conta disso...
A solução que usamos foi retirar o @Where diretamente das classes, passamos o "where active = 1" para as buscas (dentro dos DAOs), no entanto algumas casses tem relação N-M então nesses atributos o @Where entrou diretamente no atributo...
Bom, isso resolveu o problema por aqui, não foi de modo elegante... infelizmente ! mas durante a pesquisa eu vi até um framework que não recordo o nome agora e que faz esse tipo de auditoria, replicando as classes no banco, no entanto ele só funciona em um contexto JPA, diferente do hibernate... um pouco mais complicada a implementação então optamos por algo mais manual...
Abraços!!!
|
scjp 6
ocpjwcd 5
"Desconfie do destino e acredite em você. Gaste mais horas realizando que sonhando, fazendo que planejando, vivendo que esperando, porque embora quem quase morre esteja vivo, quem quase vive já morreu" - Luiz Fernando Veríssimo - Cronista e escritor. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/03/2010 16:56:18
|
bbmany
JavaTeenager
![[Avatar]](/images/avatar/8523109c9a85dbfc46eb1f46955b5449.jpg)
Membro desde: 04/12/2007 17:23:24
Mensagens: 188
Offline
|
Valeu tiagomac
Era o que eu estava pensando em fazer porque pelo Hibernate não encontrei um jeito para "ignorar" a anotação em determinadas buscas.
Vou implementar sua solução e qualquer dúvida posto aqui.
Obrigada.
|
- Brena Monteiro -
Pós-graduanda em Engenharia de Software
Bacharel em Sistemas de Informação.
Tecnóloga em Análise e Desenvolvimento de Sistemas.
Analista e desenvolvedora de sistemas web.
monteirobrena.wordpress.com
Twitter |
|
|
 |
|
|