Pergunta

Eu tenho que projetar um modelo de dados (em um aplicativo Java EE 6) que será persistido via JPA, e que também precisa ser serializado via JAXB.A última vez que fiz isso, tive um grupo de classes de entidade com anotações JAXB, e outra com anotações JPA.Isso significava que eu tinha que ter um monte de código de caldeira para traduzir entre os dois.Estou pensando em combiná-los, para que cada aula tenha ambos os tipos de anotações.Eu sei que isso pode ser feito, mas minha pergunta é, deve ser?Isso causará algum problema?

Foi útil?

Solução

A questão é um pouco larga para mim para responder. Mas eu tenho experiência relacionada específica usando jackson sob Jaxb com entidades JPA que você pode achar interessante.

No meu caso, tive um modelo JPA com aproximadamente três dúzias de entidades e muitas referências cíclicas. O gráfico de relacionamentos entre entidades também estava quase fortemente conectado. Em outras palavras, foi possível navegar para quase qualquer entidade no conjunto de qualquer outro, seguindo as relações de entidade. No meu caso, com entidades como descrito e Jackson 1.5, sobrepondo anotação Jaxb em minhas entidades JPA acabou por ser uma má ideia.

Para uma coisa, Jackson 1.5 entrou em recursão infinita nas referências cíclicas. Eu considero esse erro do operador em vez de um bug. Jackson é um software incrível. Além disso, acho que o próximo lançamento 1.6 fornece novos recursos para lidar com isso por jackson-235 . Então isso pode ser discutível em breve!

Minha outra dificuldade relacionada com a compacidade serializada em face de entidades fortemente conectadas. Serializando todas as minhas relações de entidade foi impraticável. Eu teria serializado uma quantidade obscena de informações irrelevantes em todos os pedidos, seguindo ingenuamente todas as relações de entidade em toda a profundidade.

Eu queria especificar várias serializações dos meus objetos Jaxb, escolhendo um com campos e relacionamentos apropriados, dependendo do uso pretendido. Mas, tanto quanto sei, Jaxb e Jackson não oferecem tal flexibilidade. Eles oferecem flexibilidade significativa na definição A representação - o que é transitório, como as listas parecem, etc. - mas eu não acho que várias representações são possíveis para um objeto. Talvez haja uma maneira inteligente de definir várias representações sob Jaxb ou Jackson e mudar para o tempo de execução ... Eu estaria interessado em aprender se uma coisa dessas existir. Talvez haja um recurso para isso que eu sou ignorante, ou alguns truques que podem ser jogados com subclasse. Mas eu não consegui encontrá-lo, então desisti e fui com DTOS.

novamente, tudo isso é bastante específico para o modelo. Talvez estes sejam não-questões para você (ou talvez você tenha soluções inteligentes para esses problemas!)

Outras dicas

Isso pode ser feito definitivamente. Eu realmente acho a perspectiva de manter o código para copiar entre os modelos mais problemáticos.

eclipselink é uma ótima opção para esta aplicação, pois contém ambos um JPA (Eclipselink é o RI e aberto de lista de toplink) e uma implementação JAXB.

eclipelink jaxb (moxy) contém um número de extensões para mapear as entidades JPA para XML:

Para mais informações, consulte:

Datanucleus permite persistência usando o JPA para rdbms (usando o JDBC nos bastidores) e XML (usando Jaxb nos bastidores).Ele pode interpretar suas anotações JPA como definindo como a serialização JAXB é executada - você poderia adicionar anotação jaxb também se você desejou

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top