JPA, Hibernate VS JDBC

JPA HIBERNATE JDBCLos que ya han tenido la oportunidad de trabajar con algún ORM como JPA o Hibernate sabrán las bondades que tiene ya que nos permite desarrollar de una forma mucho mas rápida y con muchos menos errores en tiempo de ejecución ya que nos permite modelar nuestras entidad como Clases Java las cuales serán convertidas a las instrucciones Insert, Update o Select según sea la operación a realizar. Claro que todas estos beneficios tiene un costo y es que el performance se degrada debido a todas las conversiones que se tiene que hacer para convertir las Entity en Querys y los ResultSet pasarlos a clases ademas que cada registro representa un Objeto en memoria que tendrá que ser administrador por nuestra servidor.

Por otro lado tenemos a JDBC que nos brinda total libertad de hacer lo que queramos sin ningún tipo de limitación explotando al máximo las características de la base datos. JDBC nos permite realizar consultas nativas para cada base de datos lo que ayuda mucho a la velocidad de respuesta y los resultados son devueltos en un ResultSet los cuales podemos extraer solamente los datos que requerimos y no toda la Entity como en el caso de JPA o Hibernate.

 

JPA,Hibernate

Ventajas

  1. Nos permite desarrollar mucho mas rápido.
  2. Permite trabajar con la base de datos por medio de entidades en vez de Querys.
  3. Nos ofrece un paradigma 100% orientado a objetos.
  4. Elimina errores en tiempo de ejecución.
  5. Mejora el mantenimiento del software.

Desventajas

  1. No ofrece toda la funcionalidad que ofrecería tirar consultas nativas.
  2. El performance es mucho mas bajo que realizar las consultas por JBDC.
  3. Puede representar una curva de aprendizaje mas grande.

 

JDBC

Ventajas

  • Ofrece un performance superior ya que es la forma mas directa de mandar instrucciones la base de datos.
  • Permite explotar al máximo las funcionalidades de la base de datos.

Desventajas

  • El mantenimiento es mucho mas costoso.
  • Introduce muchos errores en tiempo de ejecución.
  • El desarrollo es mucho mas lento.

 

Probablemente pensaras que JPA o Hibernate son mejores ya que ofrece mayor ventajas que desventajas sin embargo las desventajas que tiene son muy serias y pueden ser cruciales a la hora de decidir que tecnología utilizar ya que si tenemos una aplicación muy buena y fácil de mantener pero que tarda demasiado para consultar datos puede llegar a ser algo muy malo.

Como conclusión yo diría que si requieres una aplicación donde el rendimiento sea el factor mas importante utilices JDBC, pero por otra parte si el rendimiento es algo que no están importante puedes utilizar JPA o Hibernate.

Tutorial de JPA Gratis!!

Si estás leyendo esto en este momento es por seguramente estas interesado en aprender Hibernate o JPA, pues te tengo buenas noticias, ya que he iniciado un tutorial muy completo de JPA para que aprendas desde cero y sin conocimientos previos como utilizar JPA. No te sientas mal si lo que tu buscas es aprender Hibernate, ya que actualmente existe una implementación de JPA desarrollada por Hibernate. Además, JPA es el ORM Estándar de Java y que se integra a la perfección con el resto de especificaciones de Java, como lo es EJB 3.X, CDI, Bean Validator, entre otras más. Pues bien, si estas interesado en tomar este tutorial puedes entrar aquí.

 

9 thoughts to “JPA, Hibernate VS JDBC”

  1. Hola Oscar , yo estoy utilizando jpa y me surge duda de que estrategia de herencia a utilizar
    Yo tengo en modelo er un usuario,un administrador y un cliente.
    Usuario(id,nombre,contraseña)
    Administrador(heredade usuario)
    Cliente (muchos atributos):
    ¿Cuál me recomiendade las 2,para hacer tabla de bd?
    1)usuario(nombre,contraeña,id, discriminante)
    cliente(id,idCliente,nombre,Apellidos,fecha Nacimiento,….)

    2)administrador(isAdministrador,nombre,contraseña)
    cliente(idCliente,n,nombre,Apellidos,fecha Nacimiento,….)……………………
    Espero su contestacion

    1. Hola Laura, No estoy muy seguro si entendí tu pregunta sin embargo tratare de responderte lo mejor posible.

      Contexto: Entiendo que tiene 3 entidades Usuario, Cliente y Administrador del cual este último hereda de Cliente, entiendo que tu pregunta se refiere a que estrategia utilizar para persistir las entidades.

      Sugerencia: Antes de explicarte como persistir tus entidades tal cual las tienes me gustaría darte una sugerencia, por lo que veo, el administrador tiene los mismo campos que el cliente y solo agrega el campo isAdministrador por lo que te sugeriría que Eliminaras la entidad Administrador y pasaras el campo isAdministrador al objeto Usuario de esta forma te estarías evitando varias cosas, 1: La necesidad de tener una herencia en JPA, 2: Le darias una carga extra al framework de realizar el Join o la discriminación SOLO POR UN CAMPO, 3:Eliminas una entidad de tu ER. De esta manera solo te quedarías con las entidades Cliente y Usuario.

      Solución: Si aun a sí prefieres conservar las 3 entidades te sugiero que utilices la estrategia @Inheritance( strategy = InheritanceType.SINGLE_TABLE ) la cual es la estrategia 1 que planteas y es la mejor por una simple razón, te evitas hacer un Join para traerte un solo campo lo cual para el performance me parece lo mejor.

      Espero que la respuesta sea lo que esperabas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *