Hibernate: trocar delete por update  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
J2Alex
JavaEvangelist
[Avatar]

Membro desde: 18/01/2003 08:14:41
Mensagens: 348
Localização: São José dos Campos
Offline

Olá,

Tem como interceptar um delete no hibernate e trocar por um update? E isso deverá ocorrer em cascata também, ou seja, deve ser propagado para todas as tabelas dependentes. É possível?

Alexandre



Hoje tem Balada
https://apps.facebook.com/hojetembalada
Guia colaborativo de baladas, bares e restaurantes
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Deixe-me advinhar. Seu sistema, em vez de deletar o registro, por questões de auditoria e histórico, terá de manter o registro, atualizando um campo "ativo"=false. É isso?

Bom, se AOP, implementa uma classe que estende o EntityManager, e usa essa implementação, sobrescrevendo o método delete dele.

Exemplo:


gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
J2Alex
JavaEvangelist
[Avatar]

Membro desde: 18/01/2003 08:14:41
Mensagens: 348
Localização: São José dos Campos
Offline

Olá Daniel,

O EntityManager é específico do Java 5, correto? Se for, eu preciso disso pra Java 1.4.

E mesmo que eu fizesse dessa forma, os deletes (updates) não seriam propagados para as outras entidades, seriam?

Alexandre



Hoje tem Balada
https://apps.facebook.com/hojetembalada
Guia colaborativo de baladas, bares e restaurantes
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Eu to tão entretido nessa coisa de JPA que so penso nisso. heheehhehe
Faça o mesmo como Session do Hibernate, assim:



Se é o seu caso.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
J2Alex
JavaEvangelist
[Avatar]

Membro desde: 18/01/2003 08:14:41
Mensagens: 348
Localização: São José dos Campos
Offline

Daniel,

Essa foi a primeira idéia que tive, mas a questão é que o Session é uma interface e a classe que implementa essa interface no Hibernate (SessionImpl) é final.

Tem alguma outra idéia? É exatamente para o que você falou: historiamento.


Alexandre



Hoje tem Balada
https://apps.facebook.com/hojetembalada
Guia colaborativo de baladas, bares e restaurantes
[WWW]
passos
JavaEvangelist
[Avatar]

Membro desde: 25/10/2002 10:19:27
Mensagens: 345
Localização: Rio de Janeiro
Offline

Se e historico por nao chamar uma outro metodo delete que na verdade invalida esse dado mas utiliza o update? Nao seria mais facil?

Daniel Passos (twitter: @passos)
Curso Java | Curso Rails | Curso Android
[Email]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

J2Alex , minha solução é possível.

TuClasse imlements Session e recebe um "Session" no construtor.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
J2Alex
JavaEvangelist
[Avatar]

Membro desde: 18/01/2003 08:14:41
Mensagens: 348
Localização: São José dos Campos
Offline

passos wrote:Se e historico por nao chamar uma outro metodo delete que na verdade invalida esse dado mas utiliza o update? Nao seria mais facil?


A principal questão aqui é que preciso que isso se propague para as outras as entidades. Por exemplo: Se eu seto uma propriedade para o status de deletada, isso deve se propagar para as entidades que recebem a chave da entidade "deletada" - ou seja: todas as outras entidades deverão ter seu status de deletado alterados.

danieldestro wrote: TuClasse imlements Session e recebe um "Session" no construtor.


Ok... como eu disse, eu já havia pensado nisso... mas a questão é essa que coloquei ao passos: dessa maneira eu não vou conseguir que estas alterações se propaguem... ou eu estou enganado?

Alexandre



Hoje tem Balada
https://apps.facebook.com/hojetembalada
Guia colaborativo de baladas, bares e restaurantes
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Não existe mágica!

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
J2Alex
JavaEvangelist
[Avatar]

Membro desde: 18/01/2003 08:14:41
Mensagens: 348
Localização: São José dos Campos
Offline

Não seria bem mágica.

Se a implementação do Session não fosse final, isso seria possível. Mas beleza, talvez não seja possível fazer isso tão facilmente... o que é uma pena - seria uma feature interessante para o hibernate.

Implementar minha Session para ter efeito em uma entidade apenas, é melhor fazer isso no próprio DAO... não há vantagem. A vantagem seria aproveitar as características de propagação do Hibernate.

Alexandre



Hoje tem Balada
https://apps.facebook.com/hojetembalada
Guia colaborativo de baladas, bares e restaurantes
[WWW]
lindberg713
JavaChild
[Avatar]

Membro desde: 21/03/2009 12:53:35
Mensagens: 127
Offline

Recussitando o tópico. Alguem encontrou a solução para isto? Alguem sabe como fazer isso? Resumindo, fazer um quando der um delete no hibernate, mudar para update inclusive fazendo uso do cascade para fazer update também não entidades que dependem desta.

Obrigado!

Abraço,
Victor Lindberg

- Seu projeto usa JDBC? Veja uma solução fácil, http://www.lindbergframework.org , que prover recursos para aplicações que usam JDBC, de modo a limpar o sql dos DAOs, libertando você de se preocupar com ResultSets e te livrando de ter que percorrer sempre os ResultSets para popular seus objetos como resultado de uma consulta, criando um repositório separado só para seus comandos SQL, limpando seus DAOs, gerenciamento de transações de forma fácil e transparente, via annotation, injeção simples de dependências, e muito mais. Confira em http://www.lindbergframework.org

- Você é mais um se perguntando como fazer para manter o estado de um managedbean entre páginas diferentes ou na mesma página sem usar escopo de session nem de request usando spring + jsf? Então leia esse post e conheça o 'myview' http://lindbergframework.blogspot.com/2012/02/como-manter-o-estado-de-um-managedbean.html
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team