[RESOLVIDO] O que afinal é ORM?

Gente, to com uma dúvida em um trabalho de facul: o que é o tal Mapeamento Objeto-Relacional??
Alguém me disse que seria o próprio ER. Já em um outro trabalho, um colega colocou as classes de Active Record (classes do modelo com métodos de acesso a dados). No caso, eu uso DAO. O mapeamento que o trabalho pede seriam as classes DAO?
Eu quero aprender pra aprender mesmo, não somente para o trabalho, quero aprender o certo.
Valeus!

O ORM é uma forma de criar uma camada de intercâmbio de dados entre um banco de dados relacional e objetos. De um lado, você tem as tabelas e seus relacionamentos, do outro, os objetos de uma linguagem OO.

Cada entidade do MER se torna uma classe no modelo OO. Cada atributo de uma entidade se torna um campo em uma classe. Cada relacionamento entre entidades normalmente se torna uma associação/composição/agregação no modelo OO. Sendo assim, vc precisa criar mecanismos que fazem essa conversão automaticamente, ou seja, fazer uma consulta em SQL e essa consulta gerar um conjunto de objetos, ou então ter um método para salvar um objeto, onde sua implementação vai obter os campos desse objeto e traduzí-los em uma cláusula insert em SQL.

Você pode implementar o seu ORM manualmente usando o padrão de projeto DAO como disse, ou então usar algum framework que já faça tudo isso automaticamente para você. Um dos exemplos desses tipos de framework é o Hibernate. Nele você define suas entidades, realiza algumas configurações nas mesmas (via anotações ou XML) e o framework cuida de toda a parte “suja” para você, ou seja, gerar SQL compatível com a configuração de cada classe e o SGBD escolhido, realizando a comunicação (bidirecional) “banco de dadaos relacional <-> modelo OO”.

[]'s

Ok, então o mapeamento no meu caso são mesmo as classes DAO?

Tipo, o trabalho pede pra colocar o Mapeamento objeto relacional, então eu teria que colocar um diagrama de classes das classes DAO, seria isso?

Obrigado!

não, não são os daos. O mapeamento referencia uma classe java (um pojo, java bean, VO, ou o nome que você preferir) para representar cada tabela na base de dados. DAOs são as classes que visam acessar os dados, seriam classes que dão comandos SQL ou nesse caso que salvam os dados, ou apagam… enfim, enquanto que essas classes são os dados em si.

O mapeamento pode ser feito de mais de uma forma, pode ser feito em xml por exemplo ou via anotações no código java.

por exemplo, se você tem uma tabela cliente na base de dados com campos nome e cpf (de exemplo, vai só isso mesmo), você precisa de uma classe Cliente com com nome e cpf (o que seria varchar no banco por exemplo vai ser string no java). Ai você teria DAOs para acessar estes dados. Você conhece JDBC? se sim da uma pesquisada no hibernate, de repente você lendo sobre ele e vendo uns exemplos de busca com ele você entende melhor, vai ver que é um pouco diferente.

valeu brother! Nesse projeto, que na verdade tem um módulo J2ME (o principal) e um módulo J2EE como base no servidor web, eu estou fazendo o acesso usando DAO mas diretamente no JDBC. Já aprendi um pouco sobre Hibernate, nunca cheguei a usar mesmo, mas sei como funciona. A minha dúvida é a seguinte: como me pediram o tal ORM no trabalho, seria correto então eu colocar todas as classes envolvidas no mapeamento (no caso DAOs e beans) ou na sua opinião somente os beans mesmo? Porque são os DAOs que criam as listas ou populam beans a partir do banco, eu julguei serem eles ‘o mapeamento’, mas quero saber se está certo mesmo…
Então o correto pra vc seria eu colocar os beans do modelo?

Você entende (bem) como funciona o paradigma relacional?

[ExplicacaoForDummies mode=on]
Relacional vem de relacionamento. Entre as tabelas. Ou seja, você tem a tabela A, com uma PK X e uma FK Y, que se liga à PK Z da tabela B. a tabela A pode ter dezenas, centenas, milhares, milhões de registros. Assim como a tabela B. No entanto, ainda são relacionamentos simples.
[/ExplicacaoForDummies]

No entanto, os paradigmas orientado a objetos e relacionais são diferentes, afinal, um objeto não precisa necessariamente ter um atributo de identidade (aliás, nem uma tabela precisa ter somente uma coluna de identidade). Aliás, objetos também não são, necessariamente armazenados (ou armazeNÁVEIS) em tabelas, ou coleções, ou qualquer coisa que o valha.

A idéia, então, é escrever uma ponte entre objetos e tabelas. Note que eu disse “objetos” e não “conjuntos de strings/ints/etc”. Isso quer dizer que JDBC não é ORM porque, sozinho, ele não traz esse mapeamento. Tudo que o JDBC faz é ir até o banco de dados relacional e trazer os dados, ainda em um formato relacional. O mapeamento para objetos começa a ser feito quando esses dados são recuperados do JDBC e postos em objetos.

Às vezes funciona. Às vezes não. Como são paradigmas diferentes, eles não são compatíveis entre si em 100% dos casos. Mas, para os casos em que se aplica, é possível usar ferramentas que automatizam o processo, tal como Hibernate, EclipseLink, OpenJPA, etc.

[]'s

Olá amigo!
Pois é, eu sei como funciona o paradigma relacional. Estudo e trabalho com isso faz um tempinho. Meu sistema está pronto e funcionando corretamente, e estou utilizando ele na faculdade para um trabalho. O fato é: me pediram pra colocar no trabalho o diagrama do ORM.
O mapeamento, pelo que eu entendi, é a transformação relacional - OO e vice-versa. Minha dúvida é se eu coloco os beans puramente no diagrama, ou se eu devo colocar também as classes que fazem a ‘ponte’, no caso meus DAOs, que capturam os dados e populam os javabeans e taals…
Lembrando que eu quero as informações, não pra ‘por no trabalho’, mas gostaria de aprender com pessoas que já fizeram isso na profissão ou que sabem de alguma forma, pois quero aprender e enriquecer meus conhecimentos.
Na internet eu não achei nada que realmente me mostre um diagrama assim, gostaria de saber se alguem já fez.
Não sei se deixei claro…
Mas valeuzao viu!

Então… na verdade, seus DAOs não devem ir, já que eles não fazem parte desse mapeamento, mas sim da arquitetura da sua aplicação. Se você fez uma ferramenta ORM pra você (ou seja, não usou nenhuma das ferramentas que eu citei), então, vc deve colocá-las nesse diagrama. Caso contrário, só os beans já são suficientes.

[]'s

Bom, então vou fazer o diagrama e colocar meus pojos (sempre quis usar essa expressão) nele. Valeuzao galera, um aprendizado a mais pra mim e pra quem ler esse tópico! Obrigado!

e valeu Alexandre! :slight_smile: