Thursday 9 November 2017

Hibernate Property Type Binary Options


Im que tiene un cierto problema que asigna una matriz del byte a una base de datos de MySQL en Hibernate y me estaba preguntando si Im que falta algo obvio. Mi clase se parece más o menos a esto: La tabla se define como esto en MySQL 5.5: Y el Hibernate 3.6.2 cartografía se ve similar a esto: Estoy usando hbm2ddl para la validación solamente y me da este error cuando implemento la aplicación: Typebinary en el mapeo wouldnt causa Hibernate para esperar el tipo de las columnas para ser binario (en lugar de tinyblob,) No sé lo que sería. Pasé un tiempo Googling esto, pero no podía encontrar el error exacto. Las soluciones para errores similares fueron a. Especifique la longitud en el ltpropertygt. Eso cambia qué tipo de Hibernate espera, pero su siempre una cierta variedad de blob en lugar del tipo binario su hallazgo. En lugar de declarar un tipo en el elemento property, anidar un elemento de columna y darle un atributo sql-type. Ese trabajo pero que también haría el enlace específico a MySQL así que me gustaría evitarlo si es posible. ¿Hay algo que destaque sobre esta configuración que podría causar este desajuste Si especifico typebinary en lugar de blob, ¿por qué está esperando Hibernate una gota en lugar de un binario preguntó 12 de mayo a las 11:28 Usted está correcto - tipoquotbinaryquot es definitivamente el problema. Yo estaba (incorrectamente) asumiendo que, puesto que hay tanto un tipo Hibernate blob y un tipo Hibernate binario, el tipo quotblobquot Hibernate correspondería a los distintos tipos blob de MySQL y binario correspondería a binario. Por desgracia, no parece ser ningún tipo de Hibernate que corresponde a un binario de MySQL, que parece una supervisión bastante grande. Ndash spaaarky21 May 15 11 at 17:04 Lo que terminamos haciendo para resolver un problema similar a esto es escribir nuestro propio UserType personalizado. Los UserTypes son relativamente fáciles de implementar. Simplemente cree una clase que implemente org. hibernate. usertype. UserType e implemente los métodos override. En sus definiciones de hibernación, utilizando un tipo de usuario es bastante fácil: En pocas palabras, lo que esto hará es ejecutar esta clase para leer y escribir los datos de la base de datos. Específicamente se utilizan los métodos nullSafeGet y nullSafeSet. En nuestro caso, lo usamos para comprimir datos binarios gzip antes de escribirlo en la base de datos, y descomprimirlo como se lee. Esto oculta el hecho de que los datos se comprimen desde la aplicación utilizando estos datos. Debido a que Hibernate está diseñado para funcionar en muchos entornos diferentes, hay un gran número de parámetros de configuración. Afortunadamente, la mayoría tiene valores predeterminados sensibles y Hibernate se distribuye con un archivo de ejemplo hibernate. properties que muestra las diversas opciones. Por lo general sólo tiene que poner ese archivo en su classpath y personalizarlo. 3.1. Configuración de programación Una instancia de net. sf. hibernate. cfg. Configuration representa un conjunto completo de asignaciones de tipos Java de aplicaciones a una base de datos SQL. La configuración se utiliza para construir un SessionFactory (inmutable). Las asignaciones se compilan a partir de varios archivos de asignación XML. Puede obtener una instancia de configuración instánciéndola directamente. Heres un ejemplo de configuración de un almacén de datos a partir de asignaciones definidas en dos archivos de configuración XML (en el classpath): Una forma alternativa (a veces mejor) es dejar que Hibernate cargue un archivo de asignación usando getResourceAsStream (). Entonces Hibernate buscará archivos de asignación llamados /org/hibernate/autcion/Item. hbm. xml y /org/hibernate/autcion/Bid. hbm. xml en el classpath. Este enfoque elimina cualquier nombre de archivo codificado. Una configuración también especifica varias propiedades opcionales: Una configuración está pensada como un objeto de tiempo de configuración, que se descarta una vez que se crea SessionFactory. 3.2. Obtención de un SessionFactory Cuando todos los mapeos han sido analizados por la Configuración. La aplicación debe obtener una fábrica para las instancias de sesión. Esta fábrica está destinada a ser compartida por todos los subprocesos de aplicación: Sin embargo, Hibernate permite a su aplicación instanciar más de una SessionFactory. Esto es útil si está utilizando más de una base de datos. 3.3. Conexión JDBC proporcionada por el usuario SessionFactory puede abrir una Sesión en una conexión JDBC proporcionada por el usuario. Esta opción de diseño libera la aplicación para obtener conexiones JDBC donde quiera: La aplicación debe tener cuidado de no abrir dos sesiones concurrentes en la misma conexión JDBC 3.4. Hibernate proporcionó la conexión JDBC Alternativamente, puede tener las conexiones abiertas de SessionFactory para usted. SessionFactory se debe proporcionar con propiedades de conexión JDBC de una de las siguientes maneras: Pasar una instancia de java. util. Properties a Configuration. setProperties (). Coloque hibernate. properties en un directorio raíz del classpath. Establezca las propiedades del sistema con java - Dpropertyvalue. Incluya elementos ltpropertygt en hibernate. cfg. xml (se explicará más adelante). Si adopta este enfoque, abrir una sesión es tan simple como: Todos los nombres y semánticas de la propiedad de Hibernate se definen en la clase net. sf. hibernate. cfg. Environment. Ahora describiremos los ajustes más importantes para la configuración de la conexión JDBC. Hibernate obtendrá (y agrupará) las conexiones utilizando java. sql. DriverManager si establece las siguientes propiedades: Tabla 3.1. Hibernate JDBC Propiedades número máximo de conexiones agrupadas Hibernates propio algoritmo de agrupación de conexión es bastante rudimentario. Su objetivo es ayudarle a comenzar y no está diseñado para su uso en sistemas de producción o incluso para pruebas de rendimiento. Utilice un grupo de terceros para obtener el mejor rendimiento y estabilidad, es decir, sustituya la propiedad hibernate. connection. poolsize por la configuración específica del conjunto de conexiones. C3P0 es un grupo de conexiones JDBC de código abierto distribuido junto con Hibernate en el directorio lib. Hibernate utilizará el C3P0ConnectionProvider incorporado para la agrupación de conexiones si configura hibernate. c3p0. Propiedades. También hay soporte integrado para Apache DBCP y para Proxool. Debe configurar las propiedades hibernate. dbcp. (Propiedades de la agrupación de conexiones DBCP) para habilitar DBCPConnectionProvider. El estado de caché de la instrucción preparada está habilitado (muy recomendable) si hibernate. dbcp. ps. (Propiedades de la caché de instrucciones de DBCP). Consulte la documentación Apache communs-pool para la interpretación de estas propiedades. Debe establecer el hibernate. proxool. Propiedades si desea utilizar Proxool. Este es un ejemplo usando C3P0: Para uso dentro de un servidor de aplicaciones, Hibernate puede obtener conexiones desde un javax. sql. Datasource registrado en JNDI. Establezca las propiedades siguientes: Tabla 3.2. Hibernate Datasource Propiedades datasource Nombre JNDI URL del proveedor JNDI (opcional) clase del JNDI InitialContextFactory (opcional) base de datos usuario (opcional) base de datos contraseña de usuario (opcional) Este es un ejemplo usando un servidor de aplicaciones proporcionado JNDI fuente de datos: JDBC conexiones obtenidas de un El origen de datos JNDI participará automáticamente en las transacciones gestionadas por el contenedor del servidor de aplicaciones. Las propiedades de conexión arbitrarias pueden darse preponiendo hibernate. connnection al nombre de la propiedad. Por ejemplo, puede especificar un charSet usando hibernate. connnection. charSet. Puede definir su propia estrategia de complemento para obtener conexiones JDBC mediante la implementación de la interfaz net. sf. hibernate. connection. ConnectionProvider. Puede seleccionar una implementación personalizada estableciendo hibernate. connection. providerclass. 3.5. Propiedades de configuración opcionales Existen varias otras propiedades que controlan el comportamiento de Hibernate en tiempo de ejecución. Todos son opcionales y tienen valores por defecto razonables. Las propiedades a nivel de sistema sólo se pueden establecer a través de java - Dpropertyvalue o definirse en hibernate. properties y no con una instancia de Properties pasada a Configuration. Cuadro 3.3. Propiedades de configuración de Hibernate 3.5.2. Recuperación de unión externa Si su base de datos admite combinaciones externas de estilo ANSI o Oracle, la obtención de unión externa podría aumentar el rendimiento al limitar el número de viajes de ida y vuelta a la base de datos (a costa de posiblemente más trabajo realizado por la propia base de datos). La recolección de unión externa permite recuperar un gráfico de objetos conectados por asociaciones de uno a uno, uno a varios o uno a uno en un único SELECT de SQL. De forma predeterminada, el gráfico obtenido al cargar objetos finaliza en objetos de hoja, colecciones, objetos con proxies o donde ocurren circularidades. Para una asociación en particular. Fetching se puede habilitar o deshabilitar (y el comportamiento predeterminado anulado) estableciendo el atributo outer-join en la asignación XML. La obtención de una unión externa puede desactivarse globalmente al establecer la propiedad hibernate. maxfetchdepth en 0. Un valor de 1 o superior permite la búsqueda de unión externa para todas las asociaciones uno-a-uno y muchas-a-uno, que también se establecen de forma predeterminada en combinación externa automática. Sin embargo, las asociaciones y las colecciones uno-a-muchos nunca se obtienen con una combinación externa, a menos que se declare explícitamente para cada asociación en particular. Este comportamiento también se puede sobreescribir en tiempo de ejecución con consultas Hibernate. 3.5.3. Flujos binarios Oracle limita el tamaño de los arrays de bytes que se pueden pasar a / desde su controlador JDBC. Si desea utilizar instancias grandes de tipo binario o serializable, debe habilitar hibernate. jdbc. usestreamsforbinary. Este es un ajuste de nivel JVM solamente. 3.5.4. CacheProvider personalizado Puede integrar un sistema de caché de segundo nivel de nivel JVM (o agrupado) implementando la interfaz net. sf. hibernate. cache. CacheProvider. Puede seleccionar la implementación personalizada estableciendo hibernate. cache. providerclass. 3.5.5. Configuración de la estrategia de transacción Si desea utilizar la API de transacción de Hibernate, debe especificar una clase de fábrica para las instancias de transacción estableciendo la propiedad hibernate. transaction. factoryclass. La API de transacción oculta el mecanismo de transacción subyacente y permite que el código de Hibernate se ejecute en entornos administrados y no administrados. Existen dos opciones estándar (integradas): delegados a transacciones de base de datos (JDBC) delegadas a JTA (si una transacción existente está en curso, la sesión realiza su trabajo en ese contexto, de lo contrario se inicia una nueva transacción). También definir sus propias estrategias de transacción (para un servicio de transacción CORBA, por ejemplo). Si desea utilizar el almacenamiento en caché JVM de datos mutables en un entorno JTA, debe especificar una estrategia para obtener JTA TransactionManager. Ya que esto no está estandarizado para los contenedores J2EE: Tabla 3.5. JTA TransactionManagers 3.5.6. JNDI-bound SessionFactory Un JNDI vinculado Hibernate SessionFactory puede simplificar la búsqueda de la fábrica y la creación de nuevas sesiones. Si desea que SessionFactory se vincule a un espacio de nombres JNDI, especifique un nombre (por ejemplo, java: comp / env / hibernate / SessionFactory) utilizando la propiedad hibernate. sessionfactoryname. Si se omite esta propiedad, SessionFactory no estará vinculada a JNDI. (Esto es especialmente útil en entornos con una implementación predeterminada JNDI de sólo lectura, por ejemplo Tomcat.) Al enlazar SessionFactory a JNDI, Hibernate utilizará los valores de hibernate. jndi. url. Hibernate. jndi. class para instanciar un contexto inicial. Si no se especifican, se usará el InitialContext predeterminado. Si elige utilizar JNDI, un EJB u otra clase de utilidad puede obtener el SessionFactory mediante una búsqueda JNDI. 3.5.7. Sustitución de idioma de consulta Puede definir nuevos tokens de consulta de hibernación mediante hibernate. query. substitutions. Por ejemplo: haría que los tokens true y false se tradujeran a literales enteros en el SQL generado. Le permitirá cambiar el nombre de la función SQL LOWER. Creación de una aplicación Maven Swing mediante Hibernate - Tutorial IDE de NetBeans En este tutorial, utilice el IDE de NetBeans para crear una aplicación Java Swing desde un arquetipo Maven. La aplicación utiliza el framework Hibernate como capa de persistencia para recuperar POJOs (objetos antiguos de Java) de una base de datos relacional. El tutorial muestra cómo los asistentes en el IDE pueden ayudarle a crear los archivos Hibernate necesarios y agregar dependencias de Hibernate al POM. Después de crear los objetos Java y configurar la aplicación para utilizar Hibernate, creará una interfaz GUI para buscar y mostrar los datos. El soporte para Maven está totalmente integrado en NetBeans IDE y Maven 3 se incluye con el IDE. Puede crear aplicaciones a partir de los arquetipos Maven agrupados o de arquetipos en repositorios remotos en el asistente Nuevo proyecto. El Maven Repository Browser le permite explorar sus repositorios Maven locales y remotos, examinar artefactos y agregar dependencias de proyectos a los proyectos POM. Para seguir este tutorial, necesita los siguientes programas y recursos. Software o Recurso 7.2, 7.3, 7.4, 8.0, Java Bundle versión 2.09 o un complemento más reciente disponible desde el centro de actualización Antes de comenzar este tutorial, puede familiarizarse con la siguiente documentación. Creación de la base de datos Este tutorial utiliza una base de datos MySQL llamada sakila. La base de datos de ejemplo no se incluye al instalar el IDE, por lo que primero debe crear la base de datos para seguir este tutorial. La base de datos sakila es una base de datos MySQL de muestra gratuita disponible en el sitio MySQL. Para crear la base de datos de sakila puede descargar e instalar el complemento de la base de datos de ejemplo de Sakila utilizando el administrador de complementos. Después de instalar el complemento, puede crear la base de datos sakila desde la ventana Servicios. La base de datos sakila se agrega a la lista de bases de datos en el cuadro de diálogo Crear base de datos MySQL. Para obtener más información sobre cómo configurar el IDE para que funcione con MySQL, consulte el tutorial Conexión a una base de datos MySQL. Abra el administrador de complementos e instale el complemento de la base de datos de ejemplo de Sakila. Después de instalar el complemento, inicie el servidor de bases de datos MySQL mediante la ampliación del nodo Bases de datos en la ventana Servicios, haga clic con el botón derecho en el nodo Servidor de MySQL y seleccione Iniciar. Haga clic con el botón derecho en el nodo Servidor de MySQL y seleccione Crear base de datos. Seleccione la base de datos Sakila de la lista desplegable Nombre de la nueva base de datos en el cuadro de diálogo Crear base de datos MySQL. Haga clic en Aceptar. Al hacer clic en Aceptar, el IDE ejecutará un script para crear la base de datos Sakila y rellenar las tablas de la base de datos. Puede ver los resultados de ejecutar el script en la ventana Salida. También se agrega un nodo para la base de datos Sakila bajo el nodo MySQL Server. Haga clic con el botón derecho en el nodo Sakila y seleccione Conectar. Cuando hace clic en Conectar, aparece un nodo de conexión de base de datos para la base de datos Sakila (jdbc: mysql: // localhost: 3306 / nombre de usuario sakila en Predeterminado) en el nodo Bases de datos. Cuando una conexión está abierta, puede ver los datos en la base de datos expandiendo el nodo de conexión. La configuración de Maven Maven se incluye con el IDE y se instala cuando se instala el IDE, pero si se trata de su primer proyecto Maven, deberá comprobar la configuración de Maven en la ventana Opciones. Abra la ventana Opciones en el IDE (Herramientas gt Opciones NetBeans gt Preferencias en Mac). Seleccione la categoría Java en la ventana Opciones y haga clic en la pestaña Maven. Confirme que se ha especificado un Maven Home. Puede usar la versión Maven incluida en el IDE o especificar la ubicación de una instalación Maven local (requiere 2.0.9 o posterior). Haga clic en Aceptar para cerrar la ventana Opciones. La compatibilidad con Maven se habilita automáticamente cuando Java está habilitado en el IDE. Deberá habilitar el complemento Java EE si no está habilitado. En NetBeans IDE 7.1 y versiones anteriores del IDE, la pestaña Maven de la ventana Opciones se encuentra en la categoría Varios. Visualización de los Repositorios Maven Los artefactos que Maven utiliza para construir todos sus proyectos se almacenan en el repositorio Maven local. Cuando un artefacto se declara como una dependencia de proyecto, el artefacto se descarga en su repositorio local desde uno de los repositorios remotos registrados. Varios repositorios Maven indexados bien conocidos se registran y se enumeran en el navegador del repositorio de forma predeterminada. Los repositorios registrados contienen la mayoría de los artefactos públicos necesarios para que usted construya su proyecto. En la mayoría de los casos, no es necesario registrar ningún repositorio adicional a menos que su proyecto requiera artefactos encontrados sólo en un repositorio privado. Puede explorar sus repositorios Maven locales y remotos y realizar una comprobación inmediata de actualizaciones en la ventana Servicios. Cualquier artefacto que se encuentre en los repositorios locales o remotos se puede agregar como dependencia del proyecto. Puede expandir el nodo Repositorio local en la ventana Servicios para ver los artefactos que están presentes localmente. Los artefactos enumerados en los nodos del repositorio remoto se pueden agregar como dependencias de proyecto, pero no todos ellos están presentes localmente. Sólo se agregan al repositorio local cuando se declaran como dependencias de proyecto. Para examinar y actualizar los depósitos de Maven, realice los pasos siguientes. Seleccione Ventana gt Servicios para abrir la ventana Servicios. Expanda el nodo Maven Repositories en la ventana Servicios para ver los repositorios. Expanda un nodo de repositorio para ver los artefactos. Haga clic con el botón derecho del ratón en un nodo de repositorio y seleccione Actualizar índice en el menú emergente para actualizar el repositorio. Cuando el cursor está sobre un artefacto, el IDE muestra una información sobre herramientas con las coordenadas de los artefactos. Puede hacer doble clic en un archivo JAR de artefactos para ver detalles adicionales sobre el artefacto. Puede buscar un artefacto haciendo clic con el botón derecho en el nodo Maven Repositories en la ventana Servicios y seleccionando Buscar. Para obtener más información sobre cómo administrar las dependencias de Mp3 y cómo trabajar con los depósitos Maven en el IDE, consulte la sección Administración de dependencias de Buenas Prácticas para Apache Maven en IDE de NetBeans. Notas para NetBeans IDE 7.1 y versiones anteriores del IDE. Seleccione Ventana gt Otro gt Maven Repositories Navegador para ver los repositorios de Maven. Puede utilizar los botones de la barra de herramientas del Explorador de repositorios de Maven para actualizar índices y buscar artefactos. Creación de la aplicación Maven En este tutorial se crea un proyecto de aplicación Java Swing simple denominado DVDStoreAdmin. Usted creará el proyecto a partir de uno de los arquetipos Maven agrupados y luego modificará la configuración predeterminada del proyecto. Elección de un arquetipo El asistente de proyecto nuevo le permite crear un proyecto Maven a partir de un arquetipo Maven. El IDE incluye varios arquetipos para tipos de proyectos comunes de NetBeans, pero también puede localizar y elegir arquetipos en repositorios remotos en el asistente. Seleccione Archivo gt Nuevo proyecto (Ctrl-Shift-N 8984-Shift-N en Mac) en el menú principal para abrir el asistente Nuevo proyecto. Seleccione Aplicación Java de la categoría Maven. Haga clic en Siguiente. Escriba DVDStoreAdmin para el nombre del proyecto y establezca la ubicación del proyecto. Modifique la ID de grupo y la versión predeterminadas (opcional). La Id de grupo y la versión se utilizarán como coordenadas para el artefacto en su repositorio local cuando cree el proyecto. Cuando hace clic en Finalizar, el IDE crea el proyecto Maven y abre el proyecto en la ventana Proyectos. El IDE crea automáticamente la clase App. java en el paquete com. mycompany. dvdstoreadmin. Puede eliminar App. java porque la aplicación no lo necesita. Nota. Si es la primera vez que crea un proyecto de Maven, Maven necesitará descargar algunos complementos y artefactos necesarios al repositorio local. Esto puede llevar algún tiempo. Modificación de las propiedades del proyecto Cuando crea un proyecto Maven utilizando el asistente, las propiedades predeterminadas del proyecto se basan en el arquetipo. En algunos casos, puede que tenga que modificar las propiedades predeterminadas de acuerdo con su sistema y los requisitos de los proyectos. Por ejemplo, para este proyecto desea confirmar que el nivel de origen está establecido en 1.5 o superior porque el proyecto utiliza anotaciones. Haga clic con el botón derecho en el nodo del proyecto y seleccione Propiedades. Seleccione la categoría Fuentes en la ventana Propiedades. Confirme que el Formato Fuente / Binario seleccionado en la lista desplegable sea 1,5 o superior. Seleccione UTF-8 en la lista desplegable de la propiedad Codificación. Haga clic en Aceptar. Adición de archivos y dependencias de Hibernate Para agregar soporte para Hibernate, necesita hacer que las bibliotecas de Hibernate estén disponibles declarando los artefactos necesarios como dependencias en el POM. El IDE incluye asistentes para ayudarle a crear los archivos de Hibernate que necesite en su proyecto. Puede utilizar los asistentes en el IDE para crear un archivo de configuración de Hibernate y una clase de ayuda de la utilidad. Si crea el archivo de configuración de Hibernate mediante un asistente, el IDE actualiza automáticamente el POM para agregar las dependencias de Hibernate al proyecto. Puede agregar dependencias al proyecto en la ventana Proyectos o editando pom. xml directamente. Para agregar una dependencia en la ventana Proyectos, haga clic con el botón derecho en el nodo Dependencias en la ventana Proyectos y seleccione Añadir dependencia en el menú emergente para abrir el cuadro de diálogo Agregar dependencia. Cuando agrega una dependencia, el IDE actualiza el POM y descarga los artefactos necesarios en el repositorio local que no están presentes localmente. Para editar directamente pom. xml, abra el archivo expandiendo el nodo Archivos de proyecto en la ventana Proyectos y haciendo doble clic en pom. xml. Creación del archivo de configuración de Hibernate El archivo de configuración de Hibernate (hibernate. cfg. xml) contiene información sobre la conexión a la base de datos, las asignaciones de recursos y otras propiedades de conexión. Cuando se crea un archivo de configuración de Hibernate mediante un asistente, se especifica la conexión de la base de datos seleccionando una lista de conexiones de base de datos registradas con el IDE. Al generar el archivo de configuración, el IDE agrega automáticamente los detalles de conexión y la información de dialecto en función de la conexión de base de datos seleccionada. El IDE también modifica automáticamente el POM para agregar las dependencias Hibernate necesarias. Después de crear el archivo de configuración, puede editar el archivo mediante el editor de varias vistas o editar el XML directamente en el editor XML. Haga clic con el botón secundario en la conexión de la base de datos Sakila en la ventana Servicios y seleccione Conectar. Haga clic con el botón secundario en el nodo Paquetes de origen en la ventana Proyectos y seleccione Nuevo gt Otro para abrir el asistente Nuevo archivo. Seleccione Asistente para configuración de hibernación en la categoría Hibernar. Haga clic en Siguiente. Guarde el nombre de archivo predeterminado (hibernate. cfg). Haga clic en Examinar y especifique el directorio src / main / resources como la ubicación (si no se ha especificado). Haga clic en Siguiente. Seleccione la conexión sakila en la lista desplegable Conexión de base de datos. Haga clic en Finalizar. Al hacer clic en Finalizar, el IDE abre hibernate. cfg. xml en el editor. El archivo de configuración contiene información sobre una sola base de datos. Si amplía el nodo Dependencias en la ventana Proyectos, puede ver que el IDE agregó los artefactos de Hibernación necesarios. El IDE enumera todas las dependencias directas y transitivas necesarias para compilar el proyecto bajo el nodo Dependencias. Los artefactos que son dependencias directas (dependencias que se especifican en los proyectos POM) se indican mediante iconos JAR de color. Un artefacto está en gris si es una dependencia transitiva (un artefacto que es la dependencia de una o más dependencias directas). Puede ver los detalles de los artefactos haciendo clic con el botón derecho del ratón en un JAR y seleccionando Ver detalles del artefacto. El Visor de artefactos contiene pestañas que proporcionan detalles sobre el artefacto seleccionado. Por ejemplo, la ficha Básico proporciona detalles sobre las coordenadas de los artefactos y las versiones disponibles. La ficha Gráfico proporciona una representación visual de las dependencias del artefacto seleccionado. También puede utilizar la ficha Gráficos para descubrir y resolver conflictos de versiones entre dependencias. Modificación del archivo de configuración de Hibernate En este ejercicio, se editarán las propiedades predeterminadas especificadas en hibernate. cfg. xml para habilitar el registro de depuración para sentencias de SQL. Este ejercicio es opcional. Abra hibernate. cfg. xml en la ficha Diseño. Puede abrir el archivo expandiendo el nodo Archivos de configuración en la ventana Proyectos y haciendo doble clic en hibernate. cfg. xml. Expanda el nodo Propiedades de configuración en Propiedades opcionales. Haga clic en Agregar para abrir el cuadro de diálogo Agregar propiedad de hibernación. En el cuadro de diálogo, seleccione la propiedad hibernate. showsql y establezca el valor en true. Haga clic en Aceptar. Esto permite el registro de depuración de las instrucciones SQL. Haga clic en Agregar en el nodo Propiedades varias y seleccione hibernate. query. factoryclass en la lista desplegable Nombre de propiedad. Escriba org. hibernate. hql. internal. classic. ClassicQueryTranslatorFactory en el campo de texto. Haga clic en Aceptar. Nota. No seleccione el valor de la lista desplegable. Si hace clic en la pestaña XML del editor, puede ver el archivo en la vista XML. Su archivo debe ser similar al siguiente: Guarde los cambios en el archivo. Cuando ejecute su proyecto, podrá ver la consulta SQL impresa en la ventana de salida de IDE. Creación del archivo de ayuda de HibernateUtil. java Para utilizar Hibernate, necesita crear una clase de ayuda que controle el inicio y que acceda a Hibernates SessionFactory para obtener un objeto Session. La clase llama al método Hibernate configure (), carga el archivo de configuración hibernate. cfg. xml y luego crea el SessionFactory para obtener el objeto Session. En esta sección se utiliza el asistente Nuevo archivo para crear la clase de ayuda HibernateUtil. java. Haga clic con el botón secundario en el nodo Paquetes de origen y seleccione Nuevo gt Otro para abrir el asistente Nuevo archivo. Seleccione Hibernar en la lista Categorías y HibernateUtil. java en la lista Tipos de archivo. Haga clic en Siguiente. Escriba HibernateUtil para el nombre de la clase y sakila. util como nombre del paquete. Haga clic en Finalizar. Cuando hace clic en Finalizar, HibernateUtil. java se abre en el editor. Puede cerrar el archivo porque no necesita editar el archivo. Generación de archivos de asignación de Hibernate y clases Java En este tutorial se utiliza un objeto Java antiguo llano (POJO), Actor. java. Para representar los datos de la tabla ACTOR en la base de datos. La clase especifica los campos para las columnas de las tablas y utiliza setters y getters simples para recuperar y escribir los datos. Para asignar Actor. java a la tabla ACTOR, puede utilizar un archivo de correlación de Hibernate o utilizar anotaciones en la clase. Puede utilizar el asistente de ingeniería inversa y los archivos de asignación de Hibernate y POJO de un asistente de base de datos para crear varios POJO y archivos de asignación basados ​​en tablas de base de datos que seleccione. Como alternativa, puede utilizar asistentes en el IDE para ayudarle a crear POJOs individuales y asignar archivos desde cero. Nota. Cuando quiera crear archivos para varias tablas, lo más probable es que desee utilizar los asistentes. En este tutorial sólo es necesario crear un POJO y un archivo de asignación, por lo que es bastante fácil crear los archivos individualmente. Puede ver los pasos para crear los POJOs y asignar archivos individualmente al final de este tutorial. Crear archivo de ingeniería inversa Para usar el asistente POJOs y asignar archivos desde la base de datos, primero debe crear el archivo reveng. xml de ingeniería inversa en el directorio src / main / resources donde creó hibernate. cfg. xml. Haga clic con el botón secundario en el nodo Paquetes de origen y seleccione Nuevo gt Otro para abrir el asistente Nuevo archivo. Seleccione Hibernar en la lista Categorías e Hibernate Reverse Engineering Wizard en la lista Tipos de archivos. Haga clic en Siguiente. Escriba hibernate. reveng para el nombre de archivo. Especifique src / main / resources como la ubicación. Haga clic en Siguiente. Seleccione actor en el panel Tablas disponibles y haga clic en Agregar. Haga clic en Finalizar. El asistente genera un archivo de ingeniería inversa hibernate. reveng. xml. Puede cerrar el archivo de ingeniería inversa porque no necesitará editar el archivo. Nota. Este proyecto requiere una librería jar del conector MySQL (mysql-connector-jar-5.1.13.jar, por ejemplo). Si un JAR adecuado no aparece como una dependencia de proyecto en el nodo Dependencias, puede agregar la dependencia haciendo clic con el botón secundario en el nodo Dependencias y seleccionando Añadir dependencia. Creación de archivos de asignación de Hibernate y POJOs desde una base de datos Los archivos de asignación de Hibernate y los POJO de un asistente de base de datos generan archivos basados ​​en tablas en una base de datos. Cuando utiliza el asistente, IDE genera POJOs y archivos de asignación para usted basado en las tablas de base de datos especificadas en hibernate. reveng. xml y, a continuación, agrega las entradas de asignación a hibernate. cfg. xml. Cuando utiliza el asistente, puede elegir los archivos que desea que genere el IDE (sólo los POJO, por ejemplo) y seleccionar opciones de generación de código (genere un código que utilice anotaciones de EJB 3, por ejemplo). Haga clic con el botón secundario en el nodo Paquetes de origen en la ventana Proyectos y seleccione Nuevo gt Otro para abrir el asistente Nuevo archivo. Seleccione Hibernate Mapping Files y POJOs de una base de datos en la categoría Hibernate. Haga clic en Siguiente. Seleccione hibernate. cfg. xml en la lista desplegable Hibernate Configuration File, si no está seleccionada. Seleccione hibernate. reveng. xml de la lista desplegable Hibernate Reverse Engineering File, si no está seleccionada. Asegúrese de que las opciones Código de dominio y Mappings XML de Hibernate están seleccionadas. Escriba sakila. entity para el nombre del paquete. Haga clic en Finalizar. Cuando hace clic en Finalizar, el IDE genera el POJO Actor. java con todos los campos necesarios en el directorio src / main / java / sakila / entity. El IDE también genera un archivo de asignación de Hibernate en el directorio src / main / resources / sakila / entity y añade la entrada de asignación a hibernate. cfg. xml. Ahora que tiene el POJO y los archivos necesarios relacionados con Hibernate, puede crear un interfaz frontal Java simple para la aplicación. También creará y luego agregará una consulta HQL que consulta la base de datos para recuperar los datos. En este proceso también utilizamos el editor HQL para construir y probar la consulta. Creación de la interfaz gráfica de usuario de aplicación En este ejercicio, creará un formulario JFrame simple con algunos campos para introducir y mostrar datos. También agregará un botón que activará una consulta de base de datos para recuperar los datos. Si no está familiarizado con el uso del generador de GUI para crear formularios, puede que desee revisar el tutorial Introducción a la creación de GUI. Creación del formulario JFrame Haga clic con el botón derecho en el nodo del proyecto en la ventana Proyectos y seleccione Nuevo gt Otro para abrir el asistente Nuevo archivo. Seleccione Formulario JFrame en la categoría Formularios GUI Swing. Haga clic en Siguiente. Escriba DVDStoreAdmin para el nombre de clase y escriba sakila. ui para el paquete. Haga clic en Finalizar. Cuando hace clic en Finalizar, el IDE crea la clase y abre el Formulario JFrame en la vista Diseño del editor. Agregar elementos al formulario Ahora necesita agregar los elementos de interfaz de usuario al formulario. Cuando el formulario está abierto en la vista Diseño en el editor, la paleta aparece en el lado derecho del IDE. Para agregar un elemento al formulario, arrastre el elemento de la paleta al área de formulario. Después de agregar un elemento al formulario, debe modificar el valor predeterminado de la propiedad Nombre de variable para ese elemento. Arrastre un elemento Label de la paleta y cambie el texto a Actor Profile. Arrastre un elemento Label de la paleta y cambie el texto a First Name. Arrastre un elemento de campo de texto junto a la etiqueta Nombre y elimine el texto predeterminado. Cuando elimina el texto predeterminado, el campo de texto se contraerá. Puede cambiar el tamaño del campo de texto más adelante para ajustar la alineación de los elementos del formulario. Arrastre un elemento Label de la paleta y cambie el texto a Last Name. Arrastre un elemento de campo de texto junto a la etiqueta Apellido y elimine el texto predeterminado. Arrastre un elemento Button de la paleta y cambie el texto a Query. Arrastre un elemento de tabla de la paleta en el formulario. Modifique los valores de nombre de variable de los siguientes elementos de interfaz de usuario de acuerdo con los valores de la tabla siguiente. Puede modificar el valor de nombre de variable de un elemento haciendo clic con el botón secundario en el elemento en la vista Diseño y seleccionando Cambiar nombre de variable. Alternativamente, puede cambiar el nombre de la variable directamente en la ventana Inspector. No es necesario asignar valores de nombre de variable a los elementos de etiqueta. Cambie el tamaño de los campos de texto y alinee los elementos del formulario. Puede habilitar la propiedad Horizontal redimensionable para los campos de texto para asegurarse de que los campos de texto cambian de tamaño con la ventana y que el espaciado entre los elementos permanece constante. In Design view your form should look similar to the following image. Now that you have a form you need to create the code to assign events to the form elements. In the next exercise you will construct queries based on Hibernate Query Language to retrieve data. After you construct the queries you will add methods to the form to invoke the appropriate query when the Query button is pressed. Creating the Query in the HQL Query Editor In the IDE you can construct and test queries based on the Hibernate Query Language (HQL) using the HQL Query Editor. As you type the query the editor shows the equivalent (translated) SQL query. When you click the Run HQL Query button in the toolbar, the IDE executes the query and shows the results at the bottom of editor. In this exercise you use the HQL Editor to construct simple HQL queries that retrieve a list of actors details based on matching the first name or last name. Before you add the query to the class you will use the HQL Query Editor to test that the connection is working correctly and that the query produces the desired results. Before you can run the query you first need to compile the application. Right-click the project node and choose Build. When you click Build, the IDE will download the necessary artifacts to your local Maven repository. Expand the ltdefault packagegt source package node under the Other Sources node in the Projects window. Right-click hibernate. cfg. xml and choose Run HQL Query to open the HQL Editor. Test the connection by typing from Actor in the HQL Query Editor. Click the Run HQL Query button ( ) in the toolbar. When you click Run HQL Query you should see the query results in the bottom pane of the HQL Query Editor. Type the following query in the HQL Query Editor and click Run HQL Query to check the query results when the search string is PE. The query returns a list of actors details for those actors whose first names begin with PE. If you click the SQL button above the results you should see the following equivalent SQL query. Open a new HQL Query Editor tab and type the following query in the editor pane. Click Run HQL Query. The query returns a list of actors details for those actors whose last names begin with MO. Testing the queries shows that the queries return the desired results. The next step is to implement the queries in the application so that the appropriate query is invoked by clicking the Query button in the form. Adding the Query to the Form You now need to modify DVDStoreAdmin. java to add the query strings and create the methods to construct and invoke a query that incorporates the input variables. You also need to modify the button event handler to invoke the correct query and add a method to display the query results in the table. Open DVDStoreAdmin. java and click the Source tab. Add the following query strings (in bold) to the class. It is possible to copy the queries from the HQL Query Editor tabs into the file and then modify the code. Add the following methods to create the query based on the user input string. The methods call a method called executeHQLQuery() and create the query by combining the query string with the user entered search string. Add the executeHQLQuery() method. The executeHQLQuery() method calls Hibernate to execute the selected query. This method makes use of the HibernateUtil. java utility class to obtain the Hibernate Session. Fix your imports to add import statements for the Hibernate libraries ( org. hibernate. Query . org. hibernate. Session ) and java. util. List . Create a Query button event handler by switching to the Design view and double-clicking the Query button. The IDE creates the queryButtonActionPerformed method and displays the method in the Source view. Modify the queryButtonActionPerformed method in the Source view by adding the following code so that a query is run when the user clicks the button. Add the following method to display the results in the JTable. Fix your imports (CtrlShiftI) to add java. util. Vector and save your changes. After you save the form you can run the project. Running a Maven Project Now that the coding is finished, you can build the project and launch the application. When you build a Maven project in the IDE, Maven reads the projects POM to identify the project dependencies. All the artifacts specified as dependencies must be in your local Maven repository in order to build the project. If a required artifact is not in the local repository, Maven will checkout the artifact from a remote repository before attempting to build and run the project. After building the project, Maven will install the resulting binary as an artifact in your local repository. Building and running a project for the first time can take some time if the IDE needs to checkout any project dependencies. Subsequent builds will be much faster. To run this application, you first need to specify the Main Class. To compile and launch this application, perform the following tasks. Right-click the project node in the Projects window and choose Properties. Select the Run category in the Project Properties dialog box. Type sakila. ui. DVDStoreAdmin for the Main Class. Haga clic en Aceptar. Alternatively, you can click the Browse button and choose the main class in the dialog box. When you invoke the Run action on a Maven project in the IDE, the IDE runs the Maven goals associated with the Run action. The IDE has default goals bound to IDE actions according to the project packaging. You can view the goals bound to the Run action in the Actions pane of the projects Properties window You can customize the binding of goals to actions in the Actions pane of the projects Properties window. The GUI form opens when you launch the application. Type in a search string in the First Name or Last Name text field and click Query to search for an actor and see the details. If you look in the Output window of the IDE you can see the SQL query that retrieved the displayed results. Downloading the Solution Project You can download the solution to this tutorial as a project in the following ways. Download a zip archive of the finished project . Checkout the project sources from the NetBeans Samples by performing the following steps: Choose Team gt Subversion gt Checkout from the main menu. In the Checkout dialog box, enter the following Repository URL: svn. netbeans. org/svn/samples samples-source-code Click Next. Click Browse to open the Browse Repostiory Folders dialog box. Expand the root node and select samples/java/DVDStoreAdmin-Maven . Haga clic en Aceptar. Specify the Local Folder for the sources (the local folder must be empty). Click Finish. When you click Finish, the IDE initializes the local folder as a Subversion repository and checks out the project sources. Click Open Project in the dialog that appears when checkout is complete. Steps for checking out sources from Kenai only apply to NetBeans IDE 6.7 and 6.8. You need a Subversion client to checkout the sources from Kenai. For more about installing Subversion, see the section on Setting up Subversion in the Guide to Subversion in NetBeans IDE . Creating POJOs and Mapping Files Individually Because a POJO is a simple Java class you can use the New Java Class wizard to create the class and then edit the class in the source editor to add the necessary fields and getters and setters. After you create the POJO you then use a wizard to create a Hibernate mapping file to map the class to the table and add mapping information to hibernate. cfg. xml . When you create a mapping file from scratch you need to map the fields to the columns in the XML editor. Nota. This exercise is optional and describes how to create the POJO and mapping file that you created with the Hibernate Mapping Files and POJOs from Database wizard. Right-click the Source Packages node in the Projects window and choose New gt Java Class to open the New Java Class wizard. In the wizard, type Actor for the class name and type sakila. entity for the package. Haga clic en Finalizar. Make the following changes (displayed in bold) to the class to implement the Serializable interface and add fields for the table columns. Generate the getters and setters for the fields by placing the insertion cursor in the source editor, typing Alt-Insert and then selecting Getter and Setter. In the Generate Getters and Setters dialog box, select all the fields and click Generate. In the Generate Getters and Setters dialog box, you can use the Up arrow on the keyboard to move the selected item to the Actor node and then press the Space bar to select all fields in Actor. Fix your imports and save your changes. After you create the POJO for the table you will want to create an Hibernate Mapping File for Actor. java . Right-click the sakila. entity source packages node in the Projects window and choose New gt Other to open the New File wizard. Select Hibernate Mapping Wizard in the Hibernate category. Haga clic en Siguiente. Type Actor. hbm for the File Name and set the Folder to src/main/resources/sakila/entity . Haga clic en Siguiente. Type sakila. entity. Actor for the Class to Map. Select actor from the Database Table drop down list if not already selected. Haga clic en Finalizar. When you click Finish the Actor. hbm. xml Hibernate mapping file opens in the source editor. The IDE also automatically adds an entry for the mapping resource to hibernate. cfg. xml . You can view the entry details by expanding the Mapping node in the Design view of hibernate. cfg. xml or in the XML view. The mapping entry in the XML view will look like the following: Map the fields in Actor. java to the columns in the ACTOR table by making the following changes (in bold) to Actor. hbm. xml. You can use code completion in the editor to complete the values when modifying the mapping file. Note: By default, the generated class element has a closing tag. Because you need to add property elements between the opening and closing class element tags, you need to make the following changes (displayed in bold). After making the changes you can then use code completion between the class tags. Click the Validate XML button in the toolbar and save your changes. Creating individual POJOs and Hibernate mapping files might be a convenient way to further customize your application. See Also For additional information on creating Swing GUI applications, see the following tutorials.

No comments:

Post a Comment