| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/04/2011 07:53:14
|
bruno_cobra
JavaTeenager
Membro desde: 08/04/2007 23:59:14
Mensagens: 194
Localização: Lajeado, RS
Offline
|
Pessoal,
Estamos desenvolvendo uma aplicação que disponibiliza diversos serviços que serão consumidos por outras aplicações internas. Toda a estrutura é baseada em Hibernate, Spring e CXF.
No mapeamento das entidades, temos diversos relacionamentos bidirecionais que não podem ser alterados. Isto está me causando uma enorme dor de cabeça agora que temos que começar a consumir serviços que utilizam estas entidades, pois sempre obtenho a seguinte exceção: Tentei corrigir o problema através da anotação @XmlTransient, mas isto não é solução pois ela vai fazer a transformação desconsiderar o objeto. Imaginem que tenho uma entidade Pedido e outra Item (a primeira tem uma lista da segunda; a segunda conhece a primeira por causa da chave estrangeira). No mesmo serviço, posso solicitar o retorno do Pedido com sua lista de Itens ou apenas o Pedido ou apenas os Itens. Sendo assim, a anotação não resolve nada. (Isto é apenas um exemplo, possuo casos mais complexos.)
Também tentei implementar a interface CycleRecoverable, mas não deu em nada. Alguém já passou por isso? Alguma ideia do que fazer?
Qualquer ideia será muito bem vinda. Obrigado desde já.
|
http://blog.brunozambiazi.com
- |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/05/2011 14:20:02
|
novato25
JavaBaby
![[Avatar]](/images/avatar/37d5fa050fb58c769c3d89b398687e73.jpg)
Membro desde: 10/03/2008 07:48:50
Mensagens: 92
Offline
|
Estou exatamente com o mesmo problema. Alguém saberia como resolver e postar aqui como se faz? Obrigado!
|
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. (Martin Fowler) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/05/2011 06:47:42
|
bruno_cobra
JavaTeenager
Membro desde: 08/04/2007 23:59:14
Mensagens: 194
Localização: Lajeado, RS
Offline
|
Eu consegui resolver o problema criando classes que extendessem javax.xml.bind.annotation.adapters.XmlAdapter. Vou tentar colocar um exemplo:
Imagina um caso onde temos duas entidades, Pedido e Item. O Pedido possui uma lista de Item, enquando Item também conhece o Pedido. Isto já caracteriza um relacionamento bidirecional e, quando eu solicitasse o carregamento de um Pedido com todos os seus Item, ocorreria o problema do ciclo infinito. Pelo menos este era o meu caso.
Para corrigir, eu parti do seguinte princípio: nestes casos, eu não preciso que o Pedido esteja totalmente carregado em cada Item. Eu preciso, no máximo, do ID dele. Por isso, criei um Adapter para o Item que fazia justamente o trabalho de clonar o objeto Pedido, deixá-lo apenas com o ID setado, e aí sim "recolocá-lo" no Item.
Seria mais ou menos assim:
Depois disso, bastou anotar a classe Item com @XmlJavaTypeAdapter( ItemAdapter.class ).
Bom, esta é apenas uma forma que achei para fazer e que atendeu ao meu caso. Espero que te ajude. Boa sorte!
|
http://blog.brunozambiazi.com
- |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/05/2011 12:56:16
|
novato25
JavaBaby
![[Avatar]](/images/avatar/37d5fa050fb58c769c3d89b398687e73.jpg)
Membro desde: 10/03/2008 07:48:50
Mensagens: 92
Offline
|
bruno_cobra,
agradeço sua resposta. Resolvi o problema implementando a interface CycleRecoverable (com.sun.xml.bind.CycleRecoverable), como descrito no seguinte tópico:
http://www.guj.com.br/java/119828-web-serviceejb-problema-com-loop-infinito-relacionamento-bidirecional-entre-entidades
|
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. (Martin Fowler) |
|
|
 |
|
|