EJB3.0 + Hibernate Mapear somente algumas entidades de base existente

7 respostas
Tchello

Bom dia galera!

Serei bem direto, comecei um sistema novo aqui na empresa onde devemos usar uma base de dados comum entre outros sistemas.
Acontece que uma das exigências desse novo projeto é a utilização de EJB3.0 e Hibernate.
Algumas dessas entidades novas possuem chaves estrangeiras pra entidades já existente, que não modifcarei, apenas gostaria que seus objetos viessem junto como atributos dessas entidades novas que serão mapeadas.
Mas não gostaria de ter que mapear todas essas antigas entidades… pois são gigantescas! E isso implicaria em mapear mais tantas outras… igualmente gigantescas =Z

Como faço pra criar uma versão “simplificada” dessas entidades antigas trazendo apenas as informações que me interessam (a maioria é apena so os campos ID e Descrição) e na hora da persistência o hibernate (ou o EntityManager do EJB) não zoar a base antiga?!

Será que posso criar essa classe “simplificada” da entidade antiga e simplesmente mandar persistir que ele não vai zoar os campos que existem?
Compreenderam minha dúvida? Estou com medo de iniciar a implementação sobre um conceito errado e perder muito tempo refatorando lá na frente.

Alguma sugestão galera?!

Abraços!

7 Respostas

GraveDigger

Olá,

Cara, acho complicado vc querer começar a fazer isso “limitando” dessa forma seu escopo.

Mais cedo ou mais tarde vc vai precisar alterar algumas dessas entidades.

Acho que o mais sensato a fazer(visto que vc não quer alterar as entidades antigas) é:

  1. Usar mapeamanto via XML ao invés de annotations, dessa forma vc nem toca nas suas classes existentes
  2. Procurar alguma ferramenta que gere esse código pra vc a partir de um jar ou algo assim

Dessa forma vc não alteraria suas classes existentes, que parece ser sua principal preocupação e de quebra teria uma forma ágil de fazer essa tarefa chata que é o mapeamento via XML.

Eu tentaria essa abordagem.

Abs

Tchello

Isso eu meio que resolvi.
O problema maior que to enfrentando agora é que pra fazer algumas consultas nessas tabelas novas com relações de tabelas antigas (antigas = não mapeadas) preciso verificar alguns atributos nessas tabelas antigas pra obter registros dessas novas.
Uma solução que pensei foi SQL Nativo, alguma outra sugestão?
Fui claro o suficiente?

Abraços.!

GraveDigger

Tchello,

Não seria uma boa alternativa então fazer o mapeamento das entidades antigas? Porém, de uma forma não intrusiva(sem necessidade de alteração da classe) como o XML.

Se vc usa uma ferramenta de ORM e mete um SQL nativo no meio fica meio estranho(salvo casos bem específicos, o que não é o seu, pq isso se repetiria frequentemente).

Eu ainda partiria para o mapeamento das entidades, mas sem modificá-las.

Pelo que me lembro, dá até pra vc mesclar as coisas, talvez usar Annotations pras entidades novas e XML pra antigas, ai fica a seu critério.

Fica ai meu ponto de vista.

Abraço,

Pedro Sena

Tchello

Concordo com você, fica realmente MUITO estranho.

Mas como eu poderia fazer esse mapeamento xml? Sempre usei annotations e não estou familiarizado com esse tipo de mapeamento.
Poderia me recomendar algum artigo?

Caso seja feito dessa maneira eu faria a consulta como, por HQL? Ou conseguiria fazer por criteria?

E se eu usar algum plugin que gere as classes de entidades através da base de dados, seria bom negócio?

Abraços!

GraveDigger

Não tenho um link aqui a mão.

Mas eu tenho certeza que é possível fazer isso, lembro de ter visto em um artigo certa vez(perdi link :frowning: )

Uma busca simples no google já te traz várias opções, falta apenas testar.

http://www.google.com.br/search?q=generate+hibernate+mapping&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:pt-BR:official&client=firefox-a

Eu tentaria a task do ant que gera o hbm a partir do banco, mas ai depende de como estão suas entidades.

Uma coisa eu garanto, dá pra vc fazer o que vc precisa, só é necessário uma busca rápida pra encontrar a ferramenta.

Espero ter ajudado,

Abs

Tchello

Mas a questão é: seria elegante gerar as classes de entidades por causa disso?
Vale lembrar que a base de dados é BEM grandinha, tem muita tabela lá que eu nunca vou mexer nesse projeto.

To pesquisando aqui!!

Muito obrigado ^^

Abraços!

G

Tchello vc conseguiu usar EJB3 e hibernate via mapeamentos XML?

agradeço desde já, obrigado.

Criado 11 de maio de 2009
Ultima resposta 28 de out. de 2010
Respostas 7
Participantes 3