To Hibernate or not? Para Hibernate o no? - A commentary on ORM’s and few recommendations -- Un comentario en ORM y pocas recomendaciones
I came across the Me encontré con la post puesto from desde Jesus Rodriguez Jesús Rodríguez where he tries to find good reasons to convince management to use Hibernate. donde trata de encontrar buenas razones para convencer a la gestión de uso de Hibernate.
[[I tried posting but it required me to create an account, also I felt that the topic might be of general interest. [[He intentado publicar, pero me requiere para crear una cuenta, también me pareció que el tema podría ser de interés general. So I made this a separate post and included him in trackback & pingback.]] Así que hice este otro post y le incluyó en trackback y pingback.]]
In his case the company followed two models: En su caso, la empresa siguió dos modelos:
1. Contains all SQL in a single class Contiene todas las SQL en una sola clase
2. “One involves creating a helper object which exists between the domain object and a DatabaseCommand (our persistence class). "Uno de ellos implica la creación de un ayudante objeto que existe entre el objeto y el dominio de un DatabaseCommand (persistencia nuestra clase). The domain objects do not know how to generate SQL. El dominio de los objetos no saben cómo generar SQL. They simply know that there exists a class that accepts helpers. Ellos simplemente saber que existe una clase que acepta ayudantes. The helper has methods like getStoreColumns() and getStoreValues() which return the columns used for inserts and their corresponding values, respectively. El ayudante tiene como métodos getStoreColumns () y getStoreValues () que devuelven las columnas utilizadas para las inserciones y sus correspondientes valores, respectivamente. The helpers have direct knowledge of the domain object. Los ayudantes tienen un conocimiento directo del objeto de dominio. The DatabaseCommand knows how to build SQL statements filling in the missing information by asking the helpers.” El DatabaseCommand sabe cómo construir sentencias SQL llenado en la información que falta pidiendo a los asistentes. "
He has described the pros and cons of the system in his post. Ha descrito los pros y los contras del sistema en su puesto.
Couple of thoughts & suggestions: Par de reflexiones y sugerencias:
In general, approach one has the benefit that creating SQL code can be delegated to database specialists. En general, un enfoque tiene la ventaja de que la creación de código SQL puede ser delegada a la base de datos de especialistas. Also they can optimize the code in there later on (as it is all in a single big file) to eliminate bottlenecks or simply to speed things up. También se puede optimizar el código de ahí (como es todo en un solo archivo grande) para eliminar los cuellos de botella o simplemente para acelerar las cosas.
Logically though the key value is in isolating the db code. Aunque lógicamente el valor de clave es aislar el código db. Which can also be achieved by having the classes in a single package. Que también se puede lograr al tener las clases en un solo paquete.
The second approach as you can see is cumbersome and is rather maintenance heavy. El segundo enfoque, como se puede ver es engorroso y mantenimiento es bastante pesado.
The key issue is that in both cases a Object relational mapping is required. La cuestión clave es que en ambos casos, un objeto relacional cartografía es obligatorio. In a company I worked in the past they have created and maintained ( yeah I came in after the deed was done) a home-grown ORM layer. En una empresa trabajé en el pasado que han creado y mantenido (yeah vine después en la escritura se hizo) un hogar-ORM crecido capa. It was a nightmare because of the following key reasons: Se trata de una pesadilla, debido a las siguientes razones fundamentales:
1. It was hard to learn and complex to use Es difícil de aprender y de utilizar complejos
2. Complex queries were near impossible Complejo consultas fueron casi imposible
3. Easy queries were very time consuming to do, thereby affecting productivity Fácil preguntas fueron mucho tiempo a hacer, lo que afecta la productividad
4. Because of a general Object structure (we called them BoB - business object, I jokingly named the process bobification) type checking was non-existent thereby leading to hard to find bugs Debido a la estructura general del objeto (que llamó BoB - objeto de negocio, yo en broma el llamado proceso de bobification) Tipo de control era inexistente lo que conduce a difíciles de encontrar bugs
5. Debugging was royal pain Depuración Real fue el dolor
What I learned from this was that maintaining an ORM is a full-time job, specially to make it usable in a wide range of occassions and still make it easy to learn. Lo que aprendí de ello fue que el mantenimiento de un ORM es un trabajo de tiempo completo, especialmente para que sea utilizable en una amplia gama de ocasiones y todavía lo hacen fácil de aprender. We are not in the business of ORM. Nosotros no estamos en el negocio de ORM. We however need the functionaility. Nosotros sin embargo la necesidad functionaility. Why bother creating and maintaining a home-grown one? ¿Por qué molestarse creación y el mantenimiento de un hogar-un crecido? The focus should be on the core competency and surely ORM is not ours. La atención debería centrarse en el núcleo de competencias y seguramente ORM no es la nuestra. Hibernate and other ORM layers relieves you of the pains. Hibernate y otras capas ORM le alivia de los dolores. Most of them are easy to learn. La mayoría de ellos son fáciles de aprender. I presonally try to avoid ones which tries to create its own sql syntax as it means I have to learn yet another SQL clone. I presonally tratar de evitar los que intenta crear su propia sintaxis sql ya que significa que tengo que aprender otro clon SQL. Normally they also provide a QBE type interface, saw it in hibernate too. Normalmente aportan también una interfaz de tipo QBE, lo vio en hibernate. They are the easiest to use and really help in RAD. Ellos son los más fáciles de usar y realmente ayudar a RAD.
Everyone you hire will have to learn about a home grown ORM, whereas you may get lots of people who have used Hibernate or OJB. Todo el mundo usted contrata tendrá que aprender acerca de un hogar ORM crecido, mientras que puede recibir gran cantidad de personas que han usado Hibernate o OJB. Also for the developers it is a reusable skill. También para los desarrolladores es una habilidad reutilizables.
I rest my case. Yo descanso mi caso.
Filed under Filed under Database Base de datos , Java Software El software de Java , RDBMS | |
| |
RSS 2.0 RSS 2,0 | |
Email this Article Enviar artículo
You may also like to read También puede leer |





February 16th, 2004 at 3:59 am 16 de febrero de 2004 a las 3:59 am
ORM is not suitable for every occassion. ORM no es adecuado para cada ocasión. We for example needed to execute some complex manipulation on the database layer. Nosotros, por ejemplo, necesario para ejecutar algunos complejos manipulación en la capa de base de datos. We looked into Hibernate and it looked like it enforces pretty strict OO practices by default. Se buscaron en Hibernate y parecía que se aplica bastante estricto OO prácticas por defecto.
We decided to give ourselves more flexibility, we built a DB abstraction object which accepts command objects from a command pattern implementation. Hemos decidido darnos más flexibilidad, hemos construido una base de datos objeto de abstracción que acepte objetos de comando de un comando patrón de aplicación. This object then looks up the command on a table on the DB where it finds the appropriate stored procedure name and parameter list. Este objeto entonces busca el comando en una tabla en la base de datos donde se encuentra el adecuado procedimiento almacenado nombre y la lista de parámetros. The command object contains the necessary parameter values. El comando objeto contiene los valores de los parámetros necesarios. The DB abstraction object executes the stored procedures and returns the appropriate command result object. El PP abstracción ejecuta el objeto procedimientos almacenados y devuelve el comando adecuado resultado objeto.
All Sql code lives in the database itself, modification of this code can be done without redeployment directly in the Database. Todas código SQL vive en la propia base de datos, modificación de este código se puede hacer sin redistribución directamente en la base de datos. Even the contract for the stored procedures can be altered as it is defined in a table on the DB. Incluso el contrato para los procedimientos almacenados pueden ser alterados tal como se define en una tabla en la DB.
When you interact with a DB you usually require a service (method oriented) and i find that allowing your objects to request this service natively as a method keeps our systems really clean and provides a total separation of layers. Al interactuar con una base de datos que suelen exigir un servicio (método orientado) y me encuentro con que los objetos que permite a solicitar este servicio forma nativa como un método mantiene nuestros sistemas realmente limpio y proporciona una total separación de capas.
February 16th, 2004 at 6:35 am 16 de febrero de 2004 a las 6:35 am
You both are right. Ambos tienen razón. ORM is not the best solution (yet) for applications with mostly reporting functions. ORM no es la mejor solución (aún) para la mayoría de las aplicaciones con funciones de generación de informes. Stored procedures are a good choice for this kind of problem, as is for any mass data operation that doesn’t involve complex logic executed in the middle tier. Procedimientos almacenados son una buena opción para este tipo de problema, al igual que para cualquier operación de grandes cantidades de datos que no implique la lógica compleja ejecutados en el nivel medio. I’d say that Hibernate has some interesting features for basic reporting as well, so you can easily write the aggregation queries for a typical report screen without leaving the mapping abstraction. Yo diría que Hibernate tiene algunas características interesantes para la presentación de informes básicos y, por lo que puede escribir fácilmente la agregación de las preguntas típicas de un informe de la pantalla sin salir de la cartografía de la abstracción.
February 16th, 2004 at 10:25 pm 16 de febrero de 2004 a las 10:25 pm
Christian, your completely correct. Christian, su correcta. Deciding if you need ORM can be answered by asking yourself the question: “Do I need my data as objects?”. Decidir si necesita ORM pueden ser respondidas por usted mismo pidiendo a la pregunta: "¿Necesito mis datos como objetos?". If all you need is an in memory copy of the tables, then ORM is overkill. Si todo lo que necesita es una copia en la memoria de los cuadros, a continuación, ORM es excesiva.
March 31st, 2005 at 3:31 pm 31 de marzo de 2005, a las 3:31 pm
ORM is needed more often than most, ORM se necesita con más frecuencia que la mayoría,
Juan Murillo mentioned his proejct needed ‘complex’ queries if u researched hard enough you would have discovered u can do complex queries with HQL and SQL if you wanted to, and still keep the benfits of ORM(hibernate). Juan Murillo mencionó su proejct necesario "complejo" si las preguntas u investigado bastante difícil a usted le han descubierto u pueden hacer consultas complejas con HQL y SQL si quería, y aún mantener las prestaciones de la ORM (hibernate).
if u have a large complex project ORM mapping of your data tier, is always the best approach it makes your project ‘mature’. u si tienen un gran complejo proyecto ORM mapeo de sus datos de nivel, siempre es el mejor enfoque que hace que su proyecto 'maduro'.
December 14th, 2005 at 11:40 am 14 de diciembre de 2005, a las 11:40 am
What would be nice is to add another layer of abstraction within Hibernate to simply expose the legacy stored procedures out to the Java applications. Lo que estaría bien es añadir otra capa de abstracción dentro de Hibernate para simplemente exponer el legado procedimientos almacenados para las aplicaciones Java. The complexity comes from the fact that each Database out there has its own idiosynchrocies, but challenge is the word we developers like to hear :-), right? La complejidad viene del hecho de que cada base de datos por ahí tiene su propia idiosynchrocies, pero reto es la palabra que los desarrolladores como para escuchar :-), ¿verdad?
May 4th, 2006 at 7:02 am 4 de mayo, de 2006 a las 7:02 am
Hi Hola
Can anyone explain what will be the disadvantages calling stored procedurs using hibernate. ¿Puede alguien explicar lo que será la llamada desventajas procedurs almacenados utilizando hibernate.
Please explain me the pros and cons of Hibernate for stored procedure and the best way to invoke stored Procedures in Java. Por favor, me explique los pros y los contras de Hibernate para el procedimiento almacenado y la mejor manera de invocar los procedimientos almacenados en Java.
Thanks & REgards Gracias y cuanto