[quote=rogelgarcia][quote=Felagund]Em se falando de hibernate, temos um problema serio, como o Java é Tipificado, e não podemos criar campos em tempo de execução em uma classe (Sim, tem, mas ninguem é loco de ficar usando javassist a torto e adireita, e mesmo assim não é nativo), a solução mais elegante é o ActiveRecord do Rails, na minha opnião, você não se atem a detalhes da base, só se preocupa com detalhes do objeto, tratar os dados, não fica aquele monte de Anotações ou XML.
[/quote]
Creio que o problema não está em escrever os campos, e sim, realizar os mapeamentos ORM. Mesmo com o ActiveRecord, a aplicação continua sendo OO, e o banco relacional.
Um dos problemas que vejo no hibernate é que ele é incompleto e a forma de mapeamento é errada. Exemplo, quando mapeamos um relacionamento @OneToMany. Já definimos no mesmo lugar como é feito o mapeamento e como é feita a persistencia.
Os problemas disso são:
- A forma de mapear, e a forma de persistir, são duas coisas diferentes, logo não deveria estar tudo em apenas uma única anotação.
- O outro problema é que vc define a forma de persistir estaticamente, ou seja, vc só poderá usar essa forma de persistir. Se tiver duas situações no seu programa, o que é comum, onde em um lugar se deseja persistir de uma forma, e em outro lugar de outra forma dependendo da regra de negócio, não será possível.
Por isso sempre faço os mapeamentos não deixando o hibernate fazer nada de forma automática porque isso não funciona. Ao invés disso, executo códigos para persistir de acordo com a necessidade do meu sistema, quando for necessário. Acho que isso resolve alguns problemas que o vini citou…
[/quote]
Vc tem razão. mapeamento e persistência são coisas diferentes.
É por isso que no MiddleHeaven eu não segui essa abordagem. no MH vc consegue persistir objetos sem ter dito nada nem em xml, nem em anotations.
O proprio java é suficiente para fazer o mapeamento e saber se é 1-1 1-N , N-1, etc… Mas existem anotações para coisas como dizer que certa associação é obrigatoria (NotEmpty) e campos não podem ser vazios etc…
O MH parte do conceito de modelo de dominio. Ele constroi esse modelo analizando as classes, mas o modelo pode se criado à mao tb. Diferentes analizadores podem ser usados. Então eu posso misturar as anotações do MH com as do JEE com as do JPA, etc… desde que haja uma analizador que as entenda essa info será colocada no modelo.
Depois a partido do modelo de dominio, o modelo de persistencia é gerado. Este modelo é igual ao de dominio no caso default ( as colunas tem os nomes dos campos,as tabelas as das classes etc…) Tb aqui podemos alterar através de analizadores. Poderiamos, por exemplo, ter coisas como um @Column ou um xml que configura para um banco x espeficio.
Porque o modelo de persistencia do MH não é apenas para banco, então este passo é necessário porque o mesmo modelo de dominio pode ter partes em banco, e partes em xml, ou em memoria,etc…
O Hibernate, embora famoso, não é lá muito bem desenhado… e isso se nota cada vez mais.