jpa-mini-logo

Introducción

Supongamos que tenemos las siguientes tablas con sus correspondientes relaciones:

tablas

Lee el resto de esta entrada »

jpa-mini-logo

Introducción

Cuando se introdujo JPA 2 en el 2009, incluía la nueva criteria API. El propósito de este API era alejarse del uso de los strings JQL (JPA Query Language) en tu código. Aunque JQL parece una buena idea para “apalancarte” en tus conocimientos de SQL, en el mundo de la OO (Orientación a Objetos) tiene una grave desventaja: no existe la comprobación de las query strings en tiempo de compilación. La primera vez que tienes constancia de algo mal escrito o sintácticamente incorrecto en tu query string es en tiempo de ejecución. Esto puede hacer que baje mucho el rendimiento si los desarrolladores tienen que corregir, compilar y redesplegar para continuar.

Los test unitarios pueden ayudar a solucionar este problema pero un área donde no ayudan los test unitarios es en la refactorización. La mayoría de las herramientas de refactorización no se llevan bien con las cadenas de texto y acabas teniendo que ejecutar de nuevo los test y teniendo que corregir manualmente cada string en cada iteración de test hasta que todo está correcto.

Con la JPA Criteria API es posible tener consultas type safe (con comprobación de tipado) que se comprueben en tiempo de ejecución y que permitan una refactorización mucho más eficiente.

Lee el resto de esta entrada »

hibernate_logo

Cuidado con usar SQL Queries con Hibernate

Como nuevo usuario de Hibernate, te puede sorprender agradablemente ver que soporta la ejecución de consultas SQL mediante el método createSQLQuery() del objeto Session de Hibernate.

Inicialmente parece beneficioso utilizar las viejas y sencillas sentencias SQL para generar las consultas en tus DAO’s. Después de todo, ya conoces SQL, así que porque perder el tiempo aprendiendo HQL (Hibernate Query Language) o el Hibernate Criteria API. Además, con SQL podemos probar fácilmente las consultas en herramientas de edición de base de datos como DBVisualizer y en el caso “raro” de que lo pudiera necesitar, un DBA no familiarizado con Hibernate podría mantener y mejorar mis consultas de un modo sencillo.

Parece la solución.

Lee el resto de esta entrada »

db2
SquirrelSQL es una estupenda herramienta para trabajar con bases de datos.  Sin embargo, he tenido algún problema ejecutando consultas contra bases de datos DB2.  Cuando una consulta contenía un problema de sintaxis (o se encontraba cualquier otro error durante su ejecución), solamente me mostraba el Código de Error SQL, no el mensaje de texto comprensible por un ser humano.

Pero existe un sencillo modo de solucionar este problema:

En el alias de conexión, se debe añadir la propiedad:
  retrieveMessagesFromServerOnGetMessage=true

jdbc:db2://<server>:<port>/<db-name>:retrieveMessagesFromServerOnGetMessage=true;

Extracto del DB2 infocenter:

If you want full message text from a data server when you execute SQLWarning.getMessage calls, set the retrieveMessagesFromServerOnGetMessage property to true.

vía

oracle linux support
El Cliente Oracle utiliza la funcionalidad TCP KeepAlive del Sistema Operativo (en mi caso Linux).

Para habilitar el uso de esta característica en el Cliente Oracle hay que especificar el parámetro ENABLE=BROKEN en la cláusula DESCRIPTION del descriptor de conexión. Por ejemplo:


jdbc:oracle:thin:@(DESCRIPTION=(ENABLE=BROKEN)(ADDRESS=(PROTOCOL=tcp)(PORT=1521)(HOST=myhost))(CONNECT_DATA=(SID=orcl)))

Lee el resto de esta entrada »

Arrancar Oracle

29/08/2013

oracle linux supportSe supone que la base de datos está instalada, configurada para el usuario oracle.

  1. Conectarse como oracle:
    su - oracle
  2. Arrancar la base de datos:
    sqlplus / as sysdba (ó sqlplus "/as sysdba")
    SQL> startup
    SQL> exit
  3. Arancar el listener:
    lsnrctl start
  4. (Opcional)Arrancar la consola de administración:
    emctl start dbconsole

oracle linux supportTras clonar una máquina virtual con linux y oracle, y cambiar el nombre y la IP de la misma, me encontré con el problema de que, al arrancar el lístener de Oracle, este no escuchaba en localhost.

Me di cuenta de ello usando el comando netstat:

rubensa@oraclebox:~>netstat -na | grep 1521
tcp4 0 0 10.10.10.100.1521 *.* LISTEN
tcp4 0 0 10.10.10.100.1521 10.10.10.1.1429 ESTABLISHED
tcp4 0 0 10.10.10.100.1521 10.10.10.100.32782 ESTABLISHED
tcp4 0 0 10.10.10.100.32782 10.10.10.100.1521 ESTABLISHED
tcp4 0 0 10.10.10.100.1521 10.10.10.100.32871 ESTABLISHED

De hecho, al intenter hacer un ‘telnet localhost 1521’ obtenía un error de conexión rechazada.

Lee el resto de esta entrada »

A %d blogueros les gusta esto: