To Hibernate or not? Pour Hibernate ou pas? - A commentary on ORM’s and few recommendations -- Un commentaire sur ORM et quelques recommandations
I came across the Je suis tombé sur le post poste from à partir de Jesus Rodriguez Jesus Rodriguez where he tries to find good reasons to convince management to use Hibernate. où il tente de trouver de bonnes raisons de convaincre la direction d'utiliser Hibernate.
[[I tried posting but it required me to create an account, also I felt that the topic might be of general interest. [[J'ai essayé poste mais il a besoin-moi de créer un compte, je me suis senti aussi que le sujet pourrait être d'intérêt général. So I made this a separate post and included him in trackback & pingback.]] J'ai donc fait un poste distinct et inclus dans un pingback & trackback.]]
In his case the company followed two models: Dans son cas, la société suite à deux modèles:
1. Contains all SQL in a single class Contient tous SQL dans une seule classe
2. “One involves creating a helper object which exists between the domain object and a DatabaseCommand (our persistence class). «L'un passe par la création d'un objet d'aide qui existe entre le domaine et un objet DatabaseCommand (notre persistance classe). The domain objects do not know how to generate SQL. Le domaine des objets ne sais pas comment générer SQL. They simply know that there exists a class that accepts helpers. Ils savent simplement qu'il existe une classe qui accepte aides. The helper has methods like getStoreColumns() and getStoreValues() which return the columns used for inserts and their corresponding values, respectively. L'aide de méthodes comme l'a getStoreColumns () et getStoreValues () pour retourner les colonnes utilisées pour les encarts et de leurs valeurs correspondantes, respectivement. The helpers have direct knowledge of the domain object. Les aides ont une connaissance directe du domaine objet. The DatabaseCommand knows how to build SQL statements filling in the missing information by asking the helpers.” Le DatabaseCommand sait comment construire des requêtes SQL remplir les informations manquantes en posant les aides. "
He has described the pros and cons of the system in his post. Il a décrit les avantages et les inconvénients du système dans son poste.
Couple of thoughts & suggestions: Quelques réflexions et suggestions:
In general, approach one has the benefit that creating SQL code can be delegated to database specialists. En général, une approche a l'avantage que la création de code SQL peut être déléguée à des spécialistes de base de données. 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. En outre, ils peuvent optimiser le code il plus tard (comme c'est le tout dans un seul gros fichier) afin d'éliminer les goulets d'étranglement ou tout simplement pour accélérer les choses.
Logically though the key value is in isolating the db code. Logiquement, si la valeur de clé est d'isoler la base de données de code. Which can also be achieved by having the classes in a single package. Qui peut aussi être obtenue en ayant les classes dans un seul paquet.
The second approach as you can see is cumbersome and is rather maintenance heavy. La deuxième approche, comme vous pouvez le voir est lourde et l'entretien est plutôt lourd.
The key issue is that in both cases a Object relational mapping is required. La question essentielle est que, dans les deux cas, un objet Relational Mapping est nécessaire. 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. Dans une entreprise, j'ai travaillé dans le passé, ils ont créé et mis à jour (oui je suis arrivé après que l'acte a été fait) un home-grown ORMULAIRE couche. It was a nightmare because of the following key reasons: Il a été un cauchemar parce que des principales raisons suivantes:
1. It was hard to learn and complex to use Il est difficile d'apprendre et complexe à utiliser
2. Complex queries were near impossible Les requêtes complexes, ont été presque impossible
3. Easy queries were very time consuming to do, thereby affecting productivity Facile questions ont été très longs à faire, ce qui nuit à la productivité
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 Compte tenu d'une structure d'objets (nous avons appelé les BoB - Business Object, je blague nommé le processus bobification) le type de contrôle a été inexistant ce qui se traduit par difficile de trouver les bogues
5. Debugging was royal pain Royal de débogage a été la douleur
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. Ce que j'ai appris de ce que le maintien est un ORM est un emploi à plein temps, spécialement pour le rendre utilisable dans un large éventail d'occasions et encore, il est facile à apprendre. We are not in the business of ORM. Nous ne sommes pas dans le commerce de ORM. We however need the functionaility. Nous avons toutefois besoin du functionaility. Why bother creating and maintaining a home-grown one? Pourquoi la peine de créer et de maintenir un home-grown un? The focus should be on the core competency and surely ORM is not ours. L'accent devrait être mis sur les compétences de base et sûrement ORMULAIRE n'est pas la nôtre. Hibernate and other ORM layers relieves you of the pains. Hibernate ORM et d'autres couches de vous soulage les douleurs. Most of them are easy to learn. La plupart d'entre eux sont faciles à apprendre. 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. Je presonally essayer d'éviter ceux qui tente de créer sa propre syntaxe SQL, cela signifie que je dois apprendre encore un autre clone de SQL. Normally they also provide a QBE type interface, saw it in hibernate too. Normalement, elles fournissent une interface de type QBE, a vu dans l'hibernation. They are the easiest to use and really help in RAD. Ils sont les plus faciles à utiliser et vraiment contribuer à 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. Tout le monde vous engagez devrez en apprendre plus sur une maison ORMULAIRE augmenté, alors que vous mai obtenir un grand nombre de personnes qui ont utilisé Hibernate ou OJB. Also for the developers it is a reusable skill. De même, pour les développeurs, c'est réutilisable est une compétence.
I rest my case. Je reste mon cas.
Filed under Classé sous Database Base de données , Java Software Logiciel de Java , RDBMS SGBDR | |
| |
RSS 2.0 RSS 2,0 | |
Email this Article Envoyer cet article
You may also like to read Vous mai également à lire |





February 16th, 2004 at 3:59 am 16 février 2004 à 3:59 am
ORM is not suitable for every occassion. ORM ne convient pas pour toutes les occasions. We for example needed to execute some complex manipulation on the database layer. Nous avons par exemple nécessaire pour exécuter des manipulations complexes sur la base de données couche. We looked into Hibernate and it looked like it enforces pretty strict OO practices by default. Nous avons examiné dans Hibernate et il semblait qu'il applique très strictement les pratiques OO par défaut.
We decided to give ourselves more flexibility, we built a DB abstraction object which accepts command objects from a command pattern implementation. Nous avons décidé de nous donner plus de flexibilité, nous avons construit un objet DB abstraction qui accepte des commandes à partir d'une structure de commandement mise en œuvre. This object then looks up the command on a table on the DB where it finds the appropriate stored procedure name and parameter list. Cet objet, puis vérifie la commande sur un tableau de la BD où il décide que le nom de la procédure stockée et liste de paramètres. The command object contains the necessary parameter values. L'objet de commande contient les valeurs de paramètre. The DB abstraction object executes the stored procedures and returns the appropriate command result object. Le PB abstraction objet exécute les procédures stockées et renvoie le résultat commande appropriée objet.
All Sql code lives in the database itself, modification of this code can be done without redeployment directly in the Database. Toutes les vies code SQL dans la base de données elle-même, la modification de ce code peut se faire sans redéploiement directement dans la base de données. Even the contract for the stored procedures can be altered as it is defined in a table on the DB. Même le contrat de procédures stockées peuvent être modifiés comme il est défini dans un tableau sur la BD.
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. Lorsque vous interagissez avec un PB vous demandent généralement un service (méthode axée sur) et je trouve que le fait d'autoriser vos objets de demander ce service en natif comme une méthode tient vraiment nos systèmes propres et prévoit une séparation totale de couches.
February 16th, 2004 at 6:35 am 16 février 2004 à 6:35 am
You both are right. Vous les deux ont raison. ORM is not the best solution (yet) for applications with mostly reporting functions. ORMULAIRE n'est pas la meilleure solution (encore) pour les demandes de rapports avec la plupart des fonctions. 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. Les procédures stockées sont un bon choix pour ce type de problème, comme pour toute opération massive de données à ne pas entraîner de logique complexe exécuté au milieu de palier. 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. Je dirais que Hibernate a quelques fonctionnalités intéressantes de base de notification, ainsi, de sorte que vous pouvez facilement écrire l'agrégation des requêtes pour un type de rapport écran sans quitter la cartographie abstraction.
February 16th, 2004 at 10:25 pm 16 février 2004 à 10:25 pm
Christian, your completely correct. Christian, votre correctes. Deciding if you need ORM can be answered by asking yourself the question: “Do I need my data as objects?”. Décider si vous avez besoin d'ORM, on peut répondre en demandant vous-même la question: «Ai-je besoin de mes données comme des objets?". If all you need is an in memory copy of the tables, then ORM is overkill. Si vous n'avez besoin que d'une copie en mémoire des tableaux, puis ORM est excessif.
March 31st, 2005 at 3:31 pm 31 mars 2005 à 3:31 pm
ORM is needed more often than most, ORM est plus nécessaire que le plus souvent,
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 mentionné son besoin proejct 'complexe' et si les requêtes de recherches déjà suffisamment difficile de vous aurait découvert et peut faire des requêtes complexes avec HQL et SQL si vous voulez, tout en conservant la benfits des 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’. si et ont un grand complexe ORMULAIRE projet de cartographie des données de votre niveau, est toujours la meilleure approche, il rend votre projet "mature".
December 14th, 2005 at 11:40 am 14ème Décembre, 2005 à 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. Quel serait bien est d'ajouter une autre couche d'abstraction dans Hibernate simplement à exposer l'héritage des procédures stockées pour les applications 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 complexité vient du fait que chaque base de données là-bas a ses propres idiosynchrocies, mais défi est le mot nous, les développeurs, comme à entendre :-), n'est-ce pas?
May 4th, 2006 at 7:02 am 4 mai 2006 à 7:02 am
Hi Salut
Can anyone explain what will be the disadvantages calling stored procedurs using hibernate. Quelqu'un peut-il expliquer quelles seront les inconvénients d'appel stockées procedurs l'utilisation d'Hibernate.
Please explain me the pros and cons of Hibernate for stored procedure and the best way to invoke stored Procedures in Java. S’il vous plaît m'expliquer les avantages et les inconvénients d'Hibernate pour la procédure stockée et la meilleure façon d'invoquer des procédures stockées en Java.
Thanks & REgards Merci et ce qui concerne