[{"data":1,"prerenderedAt":1667},["ShallowReactive",2],{"navigation_docs":3,"-datos-orm":298,"-datos-orm-surround":1662},[4,18,70,105,149,178,212,257],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Evaluación","\u002Fintroduction","1.introduction\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Método de Evaluación","i-iconamoon-cheque-bold",{"title":13,"path":14,"stem":15,"icon":16},"Plataforma de Aprendizaje","\u002Fintroduction\u002Fplataforma","1.introduction\u002F2.plataforma","i-lucide-book-marked","i-lucide-house",{"title":19,"path":20,"stem":21,"children":22,"icon":25},"Interfaz Gráfica de Usuario","\u002Fgui","2.gui\u002F01.index",[23,26,30,34,38,42,46,50,54,58,62,66],{"title":24,"path":20,"stem":21,"icon":25},"¿Qué es una Interfaz Gráfica de Usuario (GUI)?","i-carbon-gui-management",{"title":27,"path":28,"stem":29,"icon":25},"Creación de Interfaces Gráficas de Usuario (GUI)","\u002Fgui\u002Fbuild-gui","2.gui\u002F02.build-gui",{"title":31,"path":32,"stem":33,"icon":25},"Componentes Básicos de Swing","\u002Fgui\u002Fcomponentes-basicos","2.gui\u002F03.componentes-basicos",{"title":35,"path":36,"stem":37},"El componente JFrame","\u002Fgui\u002Fjframe","2.gui\u002F04.jframe",{"title":39,"path":40,"stem":41},"El componente JPanel","\u002Fgui\u002Fjpanel","2.gui\u002F05.jpanel",{"title":43,"path":44,"stem":45},"El componente JButton","\u002Fgui\u002Fjbutton","2.gui\u002F06.jbutton",{"title":47,"path":48,"stem":49,"icon":25},"Elementos de texto en interfaces gráficas con Swing","\u002Fgui\u002Ftext","2.gui\u002F07.text",{"title":51,"path":52,"stem":53},"Elementos Visuales","\u002Fgui\u002Felementos-visuales","2.gui\u002F08.elementos-visuales",{"title":55,"path":56,"stem":57,"icon":25},"Eventos en Swing","\u002Fgui\u002Feventos","2.gui\u002F09.eventos",{"title":59,"path":60,"stem":61,"icon":25},"Controles en Swing","\u002Fgui\u002Fcontroles","2.gui\u002F10.controles",{"title":63,"path":64,"stem":65,"icon":25},"Atributos Comunes de los Componentes de Diseño","\u002Fgui\u002Fatributos-comunes","2.gui\u002F11.atributos-comunes",{"title":67,"path":68,"stem":69,"icon":25},"Layouts","\u002Fgui\u002Flayout","2.gui\u002F12.layout",{"title":71,"icon":25,"path":72,"stem":73,"children":74,"page":104},"Personalización","\u002Fpersonalizacion","3.personalizacion",[75,79,84,88,92,96,100],{"title":76,"path":77,"stem":78},"Jerarquía de clases en Swing","\u002Fpersonalizacion\u002Fjerarquia","3.personalizacion\u002F01.jerarquia",{"title":80,"path":81,"stem":82,"icon":83},"Personalización Inicial de Componentes Swing","\u002Fpersonalizacion\u002Fpersonalizacion-inicial","3.personalizacion\u002F02.personalizacion-inicial","i-carbon-palette",{"title":85,"path":86,"stem":87,"icon":83},"Tema y Personalización Avanzada en Swing","\u002Fpersonalizacion\u002Ftheme","3.personalizacion\u002F03.theme",{"title":89,"path":90,"stem":91,"icon":83},"Pintando en Swing","\u002Fpersonalizacion\u002Fpaint","3.personalizacion\u002F04.paint",{"title":93,"path":94,"stem":95,"icon":83},"Mi Tema 1: Comenzando con la Personalización","\u002Fpersonalizacion\u002Ftheme-start","3.personalizacion\u002F05.theme-start",{"title":97,"path":98,"stem":99,"icon":83},"UI Delegates: Personalizando la Apariencia de los Componentes","\u002Fpersonalizacion\u002Fui-delegates","3.personalizacion\u002F06.ui-delegates",{"title":101,"path":102,"stem":103,"icon":83},"Empleado delegadores de UI para personalizar la apariencia de los componentes","\u002Fpersonalizacion\u002Ftheme-02","3.personalizacion\u002F07.theme-02",false,{"title":106,"path":107,"stem":108,"children":109,"icon":148},"Programación concurrente","\u002Fconcurrencia","4.concurrencia\u002F01.index",[110,112,116,120,124,128,132,136,140,144],{"title":111,"path":107,"stem":108,"icon":83},"¿Qué es la concurrencia?",{"title":113,"path":114,"stem":115,"icon":83},"Unidades de Ejecución","\u002Fconcurrencia\u002Funidades-ejecucion","4.concurrencia\u002F02.unidades-ejecucion",{"title":117,"path":118,"stem":119,"icon":83},"Programa de flujo único y de flujo múltiple","\u002Fconcurrencia\u002Fflujos","4.concurrencia\u002F03.flujos",{"title":121,"path":122,"stem":123,"icon":83},"Hilos con Thread y Runnable","\u002Fconcurrencia\u002Fthread-runnable","4.concurrencia\u002F04.thread-runnable",{"title":125,"path":126,"stem":127},"Paralelismo V.S. Concurrencia","\u002Fconcurrencia\u002Fparalelismo","4.concurrencia\u002F05.paralelismo",{"title":129,"path":130,"stem":131,"icon":83},"Problemas clásicos de concurrencia","\u002Fconcurrencia\u002Fproblemas","4.concurrencia\u002F06.problemas",{"title":133,"path":134,"stem":135,"icon":83},"Emulando condiciones de carrera en Java","\u002Fconcurrencia\u002Fcondiciones-carrera","4.concurrencia\u002F07.condiciones-carrera",{"title":137,"path":138,"stem":139,"icon":83},"Semáforos en Java","\u002Fconcurrencia\u002Fsemaforos","4.concurrencia\u002F08.semaforos",{"title":141,"path":142,"stem":143,"icon":83},"La clase Timer en Java Swing","\u002Fconcurrencia\u002Ftimer","4.concurrencia\u002F09.timer",{"title":145,"path":146,"stem":147,"icon":83},"Algoritmos de ordenamiento de procesos","\u002Fconcurrencia\u002Falgoritmos-procesos","4.concurrencia\u002F10.algoritmos-procesos","i-carbon-parallel-groups",{"title":150,"path":151,"stem":152,"children":153,"icon":177},"Acceso a datos","\u002Fdatos","5.datos\u002F01.index",[154,157,161,165,169,173],{"title":155,"path":151,"stem":152,"icon":156},"Java y las bases de datos","i-carbon-database",{"title":158,"path":159,"stem":160},"Cliente Servidor","\u002Fdatos\u002Fcliente-servidor","5.datos\u002F02.cliente-servidor",{"title":162,"path":163,"stem":164},"CRUD","\u002Fdatos\u002Fcrud","5.datos\u002F03.crud",{"title":166,"path":167,"stem":168},"Sentencias Preparadas con JDBC","\u002Fdatos\u002Fsentencia-preparada","5.datos\u002F04.sentencia-preparada",{"title":170,"path":171,"stem":172},"DAO (Data Access Object)","\u002Fdatos\u002Fdao","5.datos\u002F05.dao",{"title":174,"path":175,"stem":176},"Usando Hibernate ORM","\u002Fdatos\u002Form","5.datos\u002F06.orm","i-gravity-ui-database-fill",{"title":179,"path":180,"stem":181,"children":182,"icon":211},"Programación móvil","\u002Fmovil","6.movil\u002F01.index",[183,186,191,195,199,203,207],{"title":184,"path":180,"stem":181,"icon":185},"¿Qué es Android y Kotlin?","i-carbon-mobile",{"title":187,"path":188,"stem":189,"icon":190},"¿Qué es Android Studio?","\u002Fmovil\u002Fandroid-studio","6.movil\u002F02.android-studio","i-carbon-application",{"title":192,"path":193,"stem":194,"icon":190},"¿Qué es Jetpack Compose?","\u002Fmovil\u002Fjetpack-compose","6.movil\u002F03.jetpack-compose",{"title":196,"path":197,"stem":198},"Filas y Columnas con Jetpack Compose","\u002Fmovil\u002Ffilas-columnas","6.movil\u002F04.filas-columnas",{"title":200,"path":201,"stem":202,"icon":190},"Componentes Básicos en Jetpack Compose","\u002Fmovil\u002Fcomponentes-basicos","6.movil\u002F05.componentes-basicos",{"title":204,"path":205,"stem":206,"icon":190},"Las Intenciones en Android con Jetpack Compose","\u002Fmovil\u002Fintentions","6.movil\u002F06.intentions",{"title":208,"path":209,"stem":210,"icon":190},"Navegación en Android con Jetpack Compose","\u002Fmovil\u002Fnavegacion","6.movil\u002F07.navegacion","phone_android",{"title":213,"icon":25,"path":214,"stem":215,"children":216,"page":104},"Ejemplos","\u002Fejemplos","7.ejemplos",[217,221,225,229,233,237,241,245,249,253],{"title":218,"path":219,"stem":220},"Ejemplo 01: Creando un validador abstracto de expresiones","\u002Fejemplos\u002Fejemplo-01","7.ejemplos\u002F01.ejemplo-01",{"title":222,"path":223,"stem":224},"Ejemplo 02: Diferencias de validar un JTextField y un JFormattedTextField","\u002Fejemplos\u002Fejemplo-02","7.ejemplos\u002F02.ejemplo-02",{"title":226,"path":227,"stem":228},"Ejemplo 03: Creando una Aplicación con GUI en Java Swing","\u002Fejemplos\u002Fejemplo-03","7.ejemplos\u002F03.ejemplo-03",{"title":230,"path":231,"stem":232},"Ejemplo 4: Estilizando componentes Swing con Delegadores","\u002Fejemplos\u002Fejemplo-04","7.ejemplos\u002F04.ejemplo-04",{"title":234,"path":235,"stem":236,"icon":83},"Ejemplo 5: Uso de Hilos con Thread y Runnable","\u002Fejemplos\u002Fejemplo-05","7.ejemplos\u002F05.ejemplo-05",{"title":238,"path":239,"stem":240,"icon":83},"Ejemplo 06: Manejando Hilos de formas Diferentes en Java","\u002Fejemplos\u002Fejemplo-06","7.ejemplos\u002F06.ejemplo-06",{"title":242,"path":243,"stem":244,"icon":83},"Ejemplo 7: Condiciones de carrera en Java","\u002Fejemplos\u002Fejemplo-07","7.ejemplos\u002F07.ejemplo-07",{"title":246,"path":247,"stem":248,"icon":83},"Ejemplo 8: Control de acceso a recursos compartidos con semáforos","\u002Fejemplos\u002Fejemplo-08","7.ejemplos\u002F08.ejemplo-08",{"title":250,"path":251,"stem":252,"icon":83},"Ejemplo 9: El restaurante y los pedidos","\u002Fejemplos\u002Fejemplo-09","7.ejemplos\u002F09.ejemplo-09",{"title":254,"path":255,"stem":256},"Ejemplo 10: Proceso FIFO (First In, First Out) con Semáforos y Swing","\u002Fejemplos\u002Fejemplo-10","7.ejemplos\u002F10.ejemplo-10",{"title":258,"icon":25,"path":259,"stem":260,"children":261,"page":104},"Actividades","\u002Factividades","8.actividades",[262,266,270,274,278,282,286,290,294],{"title":263,"path":264,"stem":265,"icon":25},"Actividad 1: Introducción al diseño de interfaces","\u002Factividades\u002Fact-01","8.actividades\u002F01.act-01",{"title":267,"path":268,"stem":269,"icon":25},"Actividad 2: Diseño de wireframes y prototipos","\u002Factividades\u002Fact-02","8.actividades\u002F02.act-02",{"title":271,"path":272,"stem":273,"icon":25},"Actividad 3: Propuesta de Proyecto y Wireframe inicial","\u002Factividades\u002Fact-03","8.actividades\u002F03.act-03",{"title":275,"path":276,"stem":277,"icon":83},"Actividad 4: Temas y Componentes Personalizados en Swing","\u002Factividades\u002Fact-04","8.actividades\u002F04.act-04",{"title":279,"path":280,"stem":281,"icon":83},"Actividad 5: Explicando la Concurrencia a un Niño de 5 Años","\u002Factividades\u002Fact-05","8.actividades\u002F05.act-05",{"title":283,"path":284,"stem":285,"icon":83},"Actividad 6: Simulación de una cocina con múltiples chefs (hilos)","\u002Factividades\u002Fact-06","8.actividades\u002F06.act-06",{"title":287,"path":288,"stem":289,"icon":83},"Actividad 7: Sistema de retiro bancario","\u002Factividades\u002Fact-07","8.actividades\u002F07.act-07",{"title":291,"path":292,"stem":293,"icon":83},"Actividad 8: Simulación de Round Robin con hilos e Interfaz Gráfica","\u002Factividades\u002Fact-08","8.actividades\u002F08.act-08",{"title":295,"path":296,"stem":297,"icon":83},"Actividad 9: CRUD con Hibernate y Swing","\u002Factividades\u002Fact-09","8.actividades\u002F09.act-09",{"id":299,"title":174,"body":300,"description":1656,"extension":1657,"links":1658,"meta":1659,"navigation":393,"path":175,"seo":1660,"stem":176,"__hash__":1661},"docs\u002F5.datos\u002F06.orm.md",{"type":301,"value":302,"toc":1646},"minimark",[303,308,312,316,319,1623,1635,1639,1642],[304,305,307],"h2",{"id":306},"qué-es-hibernate-orm","¿Qué es Hibernate ORM?",[309,310,311],"p",{},"Hibernate ORM (Object-Relational Mapping) es un framework de Java que facilita la gestión de la persistencia de datos en aplicaciones Java. Hibernate permite mapear las clases Java a tablas de base de datos y proporciona una API para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) de manera sencilla y eficiente. Con Hibernate, los desarrolladores pueden trabajar con objetos Java en lugar de escribir consultas SQL directamente, lo que mejora la productividad y reduce la cantidad de código necesario para gestionar la persistencia de datos.",[304,313,315],{"id":314},"configuración-de-hibernate-en-tu-proyecto","Configuración de Hibernate en tu proyecto",[309,317,318],{},"Para configurar Hibernate en tu proyecto Java, debes seguir estos pasos:",[320,321,323,327,335,513,517,520,523,654,658,661,677,1016,1020,1023,1027,1030,1272,1276,1279,1282,1300],"steps",{"level":322},"2",[304,324,326],{"id":325},"agregar-las-dependencias-de-hibernate","Agregar las dependencias de Hibernate",[309,328,329,330,334],{},"Si estás utilizando un sistema de construcción como Maven o Gradle, debes agregar las dependencias de Hibernate en tu archivo de configuración. Por ejemplo, con Maven, puedes agregar lo siguiente a tu ",[331,332,333],"code",{},"pom.xml",":",[336,337,342],"pre",{"className":338,"code":339,"language":340,"meta":341,"style":341},"language-xml shiki shiki-themes github-dark","\u003Cdependencies>\n    \u003C!-- Dependencia principal de Hibernate -->\n    \u003Cdependency>\n        \u003CgroupId>org.hibernate\u003C\u002FgroupId>\n        \u003CartifactId>hibernate-core\u003C\u002FartifactId>\n        \u003Cversion>7.3.0.Final\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n\n    \u003C!-- API de JPA (Jakarta Persistence) -->\n    \u003Cdependency>\n        \u003CgroupId>jakarta.persistence\u003C\u002FgroupId>\n        \u003CartifactId>jakarta.persistence-api\u003C\u002FartifactId>\n        \u003Cversion>3.1.0\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n\n    \u003C!-- Controlador JDBC para tu base de datos. Ejemplo con MariaDB\u002FMySQL -->\n    \u003Cdependency>\n        \u003CgroupId>org.mariadb.jdbc\u003C\u002FgroupId>\n        \u003CartifactId>mariadb-java-client\u003C\u002FartifactId>\n        \u003Cversion>3.5.7\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n\n    \u003C!-- Para logging (opcional pero recomendado) -->\n    \u003Cdependency>\n        \u003CgroupId>org.slf4j\u003C\u002FgroupId>\n        \u003CartifactId>slf4j-simple\u003C\u002FartifactId>\n        \u003Cversion>2.0.9\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n\u003C\u002Fdependencies>\n","xml","",[331,343,344,352,358,364,370,376,382,388,395,401,406,412,418,424,429,434,440,445,451,457,463,468,473,479,484,490,496,502,507],{"__ignoreMap":341},[345,346,349],"span",{"class":347,"line":348},"line",1,[345,350,351],{},"\u003Cdependencies>\n",[345,353,355],{"class":347,"line":354},2,[345,356,357],{},"    \u003C!-- Dependencia principal de Hibernate -->\n",[345,359,361],{"class":347,"line":360},3,[345,362,363],{},"    \u003Cdependency>\n",[345,365,367],{"class":347,"line":366},4,[345,368,369],{},"        \u003CgroupId>org.hibernate\u003C\u002FgroupId>\n",[345,371,373],{"class":347,"line":372},5,[345,374,375],{},"        \u003CartifactId>hibernate-core\u003C\u002FartifactId>\n",[345,377,379],{"class":347,"line":378},6,[345,380,381],{},"        \u003Cversion>7.3.0.Final\u003C\u002Fversion>\n",[345,383,385],{"class":347,"line":384},7,[345,386,387],{},"    \u003C\u002Fdependency>\n",[345,389,391],{"class":347,"line":390},8,[345,392,394],{"emptyLinePlaceholder":393},true,"\n",[345,396,398],{"class":347,"line":397},9,[345,399,400],{},"    \u003C!-- API de JPA (Jakarta Persistence) -->\n",[345,402,404],{"class":347,"line":403},10,[345,405,363],{},[345,407,409],{"class":347,"line":408},11,[345,410,411],{},"        \u003CgroupId>jakarta.persistence\u003C\u002FgroupId>\n",[345,413,415],{"class":347,"line":414},12,[345,416,417],{},"        \u003CartifactId>jakarta.persistence-api\u003C\u002FartifactId>\n",[345,419,421],{"class":347,"line":420},13,[345,422,423],{},"        \u003Cversion>3.1.0\u003C\u002Fversion>\n",[345,425,427],{"class":347,"line":426},14,[345,428,387],{},[345,430,432],{"class":347,"line":431},15,[345,433,394],{"emptyLinePlaceholder":393},[345,435,437],{"class":347,"line":436},16,[345,438,439],{},"    \u003C!-- Controlador JDBC para tu base de datos. Ejemplo con MariaDB\u002FMySQL -->\n",[345,441,443],{"class":347,"line":442},17,[345,444,363],{},[345,446,448],{"class":347,"line":447},18,[345,449,450],{},"        \u003CgroupId>org.mariadb.jdbc\u003C\u002FgroupId>\n",[345,452,454],{"class":347,"line":453},19,[345,455,456],{},"        \u003CartifactId>mariadb-java-client\u003C\u002FartifactId>\n",[345,458,460],{"class":347,"line":459},20,[345,461,462],{},"        \u003Cversion>3.5.7\u003C\u002Fversion>\n",[345,464,466],{"class":347,"line":465},21,[345,467,387],{},[345,469,471],{"class":347,"line":470},22,[345,472,394],{"emptyLinePlaceholder":393},[345,474,476],{"class":347,"line":475},23,[345,477,478],{},"    \u003C!-- Para logging (opcional pero recomendado) -->\n",[345,480,482],{"class":347,"line":481},24,[345,483,363],{},[345,485,487],{"class":347,"line":486},25,[345,488,489],{},"        \u003CgroupId>org.slf4j\u003C\u002FgroupId>\n",[345,491,493],{"class":347,"line":492},26,[345,494,495],{},"        \u003CartifactId>slf4j-simple\u003C\u002FartifactId>\n",[345,497,499],{"class":347,"line":498},27,[345,500,501],{},"        \u003Cversion>2.0.9\u003C\u002Fversion>\n",[345,503,505],{"class":347,"line":504},28,[345,506,387],{},[345,508,510],{"class":347,"line":509},29,[345,511,512],{},"\u003C\u002Fdependencies>\n",[304,514,516],{"id":515},"configurar-el-archivo-de-configuración-de-hibernate","Configurar el archivo de configuración de Hibernate",[309,518,519],{},"Hibernate necesita saber cómo conectarse a tu base de datos. Esto se define en el archivo hibernate.cfg.xml, que debes ubicar en la carpeta src\u002Fmain\u002Fresources.",[309,521,522],{},"Este archivo contiene la configuración de la conexión (URL, usuario, contraseña), el dialecto SQL (para optimizar las consultas según tu motor) y la configuración del esquema de la base de datos",[336,524,526],{"className":338,"code":525,"language":340,"meta":341,"style":341},"\u003C?xml version='1.0' encoding='utf-8'?>\n\u003C!DOCTYPE hibernate-configuration PUBLIC\n        \"-\u002F\u002FHibernate\u002FHibernate Configuration DTD 3.0\u002F\u002FEN\"\n        \"http:\u002F\u002Fwww.hibernate.org\u002Fdtd\u002Fhibernate-configuration-3.0.dtd\">\n\u003Chibernate-configuration>\n    \u003Csession-factory>\n        \u003C!-- Configuración de conexión a BD ejemplo con MariaDB\u002FMySQL -->\n        \u003Cproperty name=\"hibernate.connection.driver_class\">org.mariadb.jdbc.Driver\u003C\u002Fproperty>\n        \u003Cproperty name=\"hibernate.connection.url\">jdbc:mariadb:\u002F\u002Flocalhost:3306\u002Fmi_base_de_datos\u003C\u002Fproperty> \n        \u003Cproperty name=\"hibernate.connection.username\">tu_usuario\u003C\u002Fproperty>\n        \u003Cproperty name=\"hibernate.connection.password\">tu_contraseña\u003C\u002Fproperty>\n\n        \u003C!-- Dialecto SQL (cambia según tu BD: MySQL, PostgreSQL, etc.) -->\n        \u003Cproperty name=\"hibernate.dialect\">org.hibernate.dialect.MariaDBDialect\u003C\u002Fproperty>\n\n        \u003C!-- Muy útil: muestra las consultas SQL en la consola -->\n        \u003Cproperty name=\"hibernate.show_sql\">true\u003C\u002Fproperty>\n        \u003Cproperty name=\"hibernate.format_sql\">true\u003C\u002Fproperty>\n\n        \u003C!-- Actualiza el esquema de la BD automáticamente -->\n        \u003Cproperty name=\"hibernate.hbm2ddl.auto\">update\u003C\u002Fproperty>\n\n        \u003C!-- Aquí listaremos las clases mapeadas -->\n        \u003Cmapping class=\"com.app.entidades.Usuario\"\u002F>\n    \u003C\u002Fsession-factory>\n\u003C\u002Fhibernate-configuration>\n",[331,527,528,533,538,543,548,553,558,563,568,573,578,583,587,592,597,601,606,611,616,620,625,630,634,639,644,649],{"__ignoreMap":341},[345,529,530],{"class":347,"line":348},[345,531,532],{},"\u003C?xml version='1.0' encoding='utf-8'?>\n",[345,534,535],{"class":347,"line":354},[345,536,537],{},"\u003C!DOCTYPE hibernate-configuration PUBLIC\n",[345,539,540],{"class":347,"line":360},[345,541,542],{},"        \"-\u002F\u002FHibernate\u002FHibernate Configuration DTD 3.0\u002F\u002FEN\"\n",[345,544,545],{"class":347,"line":366},[345,546,547],{},"        \"http:\u002F\u002Fwww.hibernate.org\u002Fdtd\u002Fhibernate-configuration-3.0.dtd\">\n",[345,549,550],{"class":347,"line":372},[345,551,552],{},"\u003Chibernate-configuration>\n",[345,554,555],{"class":347,"line":378},[345,556,557],{},"    \u003Csession-factory>\n",[345,559,560],{"class":347,"line":384},[345,561,562],{},"        \u003C!-- Configuración de conexión a BD ejemplo con MariaDB\u002FMySQL -->\n",[345,564,565],{"class":347,"line":390},[345,566,567],{},"        \u003Cproperty name=\"hibernate.connection.driver_class\">org.mariadb.jdbc.Driver\u003C\u002Fproperty>\n",[345,569,570],{"class":347,"line":397},[345,571,572],{},"        \u003Cproperty name=\"hibernate.connection.url\">jdbc:mariadb:\u002F\u002Flocalhost:3306\u002Fmi_base_de_datos\u003C\u002Fproperty> \n",[345,574,575],{"class":347,"line":403},[345,576,577],{},"        \u003Cproperty name=\"hibernate.connection.username\">tu_usuario\u003C\u002Fproperty>\n",[345,579,580],{"class":347,"line":408},[345,581,582],{},"        \u003Cproperty name=\"hibernate.connection.password\">tu_contraseña\u003C\u002Fproperty>\n",[345,584,585],{"class":347,"line":414},[345,586,394],{"emptyLinePlaceholder":393},[345,588,589],{"class":347,"line":420},[345,590,591],{},"        \u003C!-- Dialecto SQL (cambia según tu BD: MySQL, PostgreSQL, etc.) -->\n",[345,593,594],{"class":347,"line":426},[345,595,596],{},"        \u003Cproperty name=\"hibernate.dialect\">org.hibernate.dialect.MariaDBDialect\u003C\u002Fproperty>\n",[345,598,599],{"class":347,"line":431},[345,600,394],{"emptyLinePlaceholder":393},[345,602,603],{"class":347,"line":436},[345,604,605],{},"        \u003C!-- Muy útil: muestra las consultas SQL en la consola -->\n",[345,607,608],{"class":347,"line":442},[345,609,610],{},"        \u003Cproperty name=\"hibernate.show_sql\">true\u003C\u002Fproperty>\n",[345,612,613],{"class":347,"line":447},[345,614,615],{},"        \u003Cproperty name=\"hibernate.format_sql\">true\u003C\u002Fproperty>\n",[345,617,618],{"class":347,"line":453},[345,619,394],{"emptyLinePlaceholder":393},[345,621,622],{"class":347,"line":459},[345,623,624],{},"        \u003C!-- Actualiza el esquema de la BD automáticamente -->\n",[345,626,627],{"class":347,"line":465},[345,628,629],{},"        \u003Cproperty name=\"hibernate.hbm2ddl.auto\">update\u003C\u002Fproperty>\n",[345,631,632],{"class":347,"line":470},[345,633,394],{"emptyLinePlaceholder":393},[345,635,636],{"class":347,"line":475},[345,637,638],{},"        \u003C!-- Aquí listaremos las clases mapeadas -->\n",[345,640,641],{"class":347,"line":481},[345,642,643],{},"        \u003Cmapping class=\"com.app.entidades.Usuario\"\u002F>\n",[345,645,646],{"class":347,"line":486},[345,647,648],{},"    \u003C\u002Fsession-factory>\n",[345,650,651],{"class":347,"line":492},[345,652,653],{},"\u003C\u002Fhibernate-configuration>\n",[304,655,657],{"id":656},"crear-una-entidad-clase-pojo","Crear una Entidad (Clase POJO)",[309,659,660],{},"Una entidad es una clase Java que se \"mapeará\" a una tabla en la base de datos. Utilizamos anotaciones JPA para definir este mapeo.",[662,663,664,668,671,674],"ul",{},[665,666,667],"li",{},"@Entity: Indica que esta clase es una entidad de Hibernate.",[665,669,670],{},"@Table: Especifica el nombre de la tabla en la BD.",[665,672,673],{},"@Id: Define la clave primaria.",[665,675,676],{},"@GeneratedValue: Indica que el ID se generará automáticamente.",[336,678,682],{"className":679,"code":680,"language":681,"meta":341,"style":341},"language-java shiki shiki-themes github-dark","package com.app.entidades;\n\nimport jakarta.persistence.*;\n\n@Entity\n@Table(name = \"usuarios\")\npublic class Usuario {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    @Column(name = \"nombre\", nullable = false)\n    private String nombre;\n\n    @Column(name = \"email\", nullable = false, unique = true)\n    private String email;\n\n    \u002F\u002F Constructor vacío requerido por Hibernate\n    public Usuario() {}\n\n    \u002F\u002F Constructor con parámetros\n    public Usuario(String nombre, String email) {\n        this.nombre = nombre;\n        this.email = email;\n    }\n\n    \u002F\u002F Getters y setters\n    public Long getId() {\n        return id;\n    }\n\n    \u002F\u002F ... (otros getters y setters)\n}\n","java",[331,683,684,694,698,713,717,725,748,763,771,788,796,800,829,836,840,875,882,886,892,902,906,911,933,947,959,964,968,973,986,994,999,1004,1010],{"__ignoreMap":341},[345,685,686,690],{"class":347,"line":348},[345,687,689],{"class":688},"snl16","package",[345,691,693],{"class":692},"s95oV"," com.app.entidades;\n",[345,695,696],{"class":347,"line":354},[345,697,394],{"emptyLinePlaceholder":393},[345,699,700,703,706,710],{"class":347,"line":360},[345,701,702],{"class":688},"import",[345,704,705],{"class":692}," jakarta.persistence.",[345,707,709],{"class":708},"sDLfK","*",[345,711,712],{"class":692},";\n",[345,714,715],{"class":347,"line":366},[345,716,394],{"emptyLinePlaceholder":393},[345,718,719,722],{"class":347,"line":372},[345,720,721],{"class":692},"@",[345,723,724],{"class":688},"Entity\n",[345,726,727,729,732,735,738,741,745],{"class":347,"line":378},[345,728,721],{"class":692},[345,730,731],{"class":688},"Table",[345,733,734],{"class":692},"(",[345,736,737],{"class":708},"name",[345,739,740],{"class":688}," =",[345,742,744],{"class":743},"sU2Wk"," \"usuarios\"",[345,746,747],{"class":692},")\n",[345,749,750,753,756,760],{"class":347,"line":384},[345,751,752],{"class":688},"public",[345,754,755],{"class":688}," class",[345,757,759],{"class":758},"svObZ"," Usuario",[345,761,762],{"class":692}," {\n",[345,764,765,768],{"class":347,"line":390},[345,766,767],{"class":692},"    @",[345,769,770],{"class":688},"Id\n",[345,772,773,775,778,780,783,785],{"class":347,"line":397},[345,774,767],{"class":692},[345,776,777],{"class":688},"GeneratedValue",[345,779,734],{"class":692},[345,781,782],{"class":708},"strategy",[345,784,740],{"class":688},[345,786,787],{"class":692}," GenerationType.IDENTITY)\n",[345,789,790,793],{"class":347,"line":403},[345,791,792],{"class":688},"    private",[345,794,795],{"class":692}," Long id;\n",[345,797,798],{"class":347,"line":408},[345,799,394],{"emptyLinePlaceholder":393},[345,801,802,804,807,809,811,813,816,819,822,824,827],{"class":347,"line":414},[345,803,767],{"class":692},[345,805,806],{"class":688},"Column",[345,808,734],{"class":692},[345,810,737],{"class":708},[345,812,740],{"class":688},[345,814,815],{"class":743}," \"nombre\"",[345,817,818],{"class":692},", ",[345,820,821],{"class":708},"nullable",[345,823,740],{"class":688},[345,825,826],{"class":708}," false",[345,828,747],{"class":692},[345,830,831,833],{"class":347,"line":420},[345,832,792],{"class":688},[345,834,835],{"class":692}," String nombre;\n",[345,837,838],{"class":347,"line":426},[345,839,394],{"emptyLinePlaceholder":393},[345,841,842,844,846,848,850,852,855,857,859,861,863,865,868,870,873],{"class":347,"line":431},[345,843,767],{"class":692},[345,845,806],{"class":688},[345,847,734],{"class":692},[345,849,737],{"class":708},[345,851,740],{"class":688},[345,853,854],{"class":743}," \"email\"",[345,856,818],{"class":692},[345,858,821],{"class":708},[345,860,740],{"class":688},[345,862,826],{"class":708},[345,864,818],{"class":692},[345,866,867],{"class":708},"unique",[345,869,740],{"class":688},[345,871,872],{"class":708}," true",[345,874,747],{"class":692},[345,876,877,879],{"class":347,"line":436},[345,878,792],{"class":688},[345,880,881],{"class":692}," String email;\n",[345,883,884],{"class":347,"line":442},[345,885,394],{"emptyLinePlaceholder":393},[345,887,888],{"class":347,"line":447},[345,889,891],{"class":890},"sAwPA","    \u002F\u002F Constructor vacío requerido por Hibernate\n",[345,893,894,897,899],{"class":347,"line":453},[345,895,896],{"class":688},"    public",[345,898,759],{"class":758},[345,900,901],{"class":692},"() {}\n",[345,903,904],{"class":347,"line":459},[345,905,394],{"emptyLinePlaceholder":393},[345,907,908],{"class":347,"line":465},[345,909,910],{"class":890},"    \u002F\u002F Constructor con parámetros\n",[345,912,913,915,917,920,924,927,930],{"class":347,"line":470},[345,914,896],{"class":688},[345,916,759],{"class":758},[345,918,919],{"class":692},"(String ",[345,921,923],{"class":922},"s9osk","nombre",[345,925,926],{"class":692},", String ",[345,928,929],{"class":922},"email",[345,931,932],{"class":692},") {\n",[345,934,935,938,941,944],{"class":347,"line":475},[345,936,937],{"class":708},"        this",[345,939,940],{"class":692},".nombre ",[345,942,943],{"class":688},"=",[345,945,946],{"class":692}," nombre;\n",[345,948,949,951,954,956],{"class":347,"line":481},[345,950,937],{"class":708},[345,952,953],{"class":692},".email ",[345,955,943],{"class":688},[345,957,958],{"class":692}," email;\n",[345,960,961],{"class":347,"line":486},[345,962,963],{"class":692},"    }\n",[345,965,966],{"class":347,"line":492},[345,967,394],{"emptyLinePlaceholder":393},[345,969,970],{"class":347,"line":498},[345,971,972],{"class":890},"    \u002F\u002F Getters y setters\n",[345,974,975,977,980,983],{"class":347,"line":504},[345,976,896],{"class":688},[345,978,979],{"class":692}," Long ",[345,981,982],{"class":758},"getId",[345,984,985],{"class":692},"() {\n",[345,987,988,991],{"class":347,"line":509},[345,989,990],{"class":688},"        return",[345,992,993],{"class":692}," id;\n",[345,995,997],{"class":347,"line":996},30,[345,998,963],{"class":692},[345,1000,1002],{"class":347,"line":1001},31,[345,1003,394],{"emptyLinePlaceholder":393},[345,1005,1007],{"class":347,"line":1006},32,[345,1008,1009],{"class":890},"    \u002F\u002F ... (otros getters y setters)\n",[345,1011,1013],{"class":347,"line":1012},33,[345,1014,1015],{"class":692},"}\n",[1017,1018,1019],"note",{},"Recuerda que el nombre de la tabla y las columnas en la base de datos se pueden personalizar utilizando las anotaciones @Table y @Column. Si no las usas, Hibernate generará los nombres automáticamente basándose en el nombre de la clase y los campos.",[1017,1021,1022],{},"Recuerda que deberás colocar todas las clases de entidad en el mismo paquete o asegurarte de que estén listadas en el archivo de configuración de Hibernate para que sean reconocidas y mapeadas correctamente.",[304,1024,1026],{"id":1025},"crear-una-clase-de-utilidad-para-gestionar-la-sesión-de-hibernate","Crear una clase de utilidad para gestionar la sesión de Hibernate",[309,1028,1029],{},"Para interactuar con la base de datos a través de Hibernate, necesitamos una clase que gestione la sesión (Session) y la fábrica de sesiones (SessionFactory). Esta clase se encargará de abrir y cerrar sesiones, así como de manejar las transacciones.",[336,1031,1033],{"className":679,"code":1032,"language":681,"meta":341,"style":341},"package com.app.utilidades;\n\nimport org.hibernate.SessionFactory;\nimport org.hibernate.cfg.Configuration;\n\npublic class HibernateUtil {\n    private static final SessionFactory sessionFactory = buildSessionFactory();\n\n    private static SessionFactory buildSessionFactory() {\n        try {\n            \u002F\u002F Carga el archivo hibernate.cfg.xml desde la raíz del classpath\n            return new Configuration().configure().buildSessionFactory();\n        } catch (Throwable ex) {\n            System.err.println(\"Error al inicializar SessionFactory: \" + ex);\n            throw new ExceptionInInitializerError(ex);\n        }\n    }\n\n    public static SessionFactory getSessionFactory() {\n        return sessionFactory;\n    }\n\n    public static void shutdown() {\n        getSessionFactory().close();\n    }\n}\n",[331,1034,1035,1042,1046,1053,1060,1064,1075,1096,1100,1114,1121,1126,1149,1165,1184,1197,1202,1206,1210,1223,1230,1234,1238,1252,1264,1268],{"__ignoreMap":341},[345,1036,1037,1039],{"class":347,"line":348},[345,1038,689],{"class":688},[345,1040,1041],{"class":692}," com.app.utilidades;\n",[345,1043,1044],{"class":347,"line":354},[345,1045,394],{"emptyLinePlaceholder":393},[345,1047,1048,1050],{"class":347,"line":360},[345,1049,702],{"class":688},[345,1051,1052],{"class":692}," org.hibernate.SessionFactory;\n",[345,1054,1055,1057],{"class":347,"line":366},[345,1056,702],{"class":688},[345,1058,1059],{"class":692}," org.hibernate.cfg.Configuration;\n",[345,1061,1062],{"class":347,"line":372},[345,1063,394],{"emptyLinePlaceholder":393},[345,1065,1066,1068,1070,1073],{"class":347,"line":378},[345,1067,752],{"class":688},[345,1069,755],{"class":688},[345,1071,1072],{"class":758}," HibernateUtil",[345,1074,762],{"class":692},[345,1076,1077,1079,1082,1085,1088,1090,1093],{"class":347,"line":384},[345,1078,792],{"class":688},[345,1080,1081],{"class":688}," static",[345,1083,1084],{"class":688}," final",[345,1086,1087],{"class":692}," SessionFactory sessionFactory ",[345,1089,943],{"class":688},[345,1091,1092],{"class":758}," buildSessionFactory",[345,1094,1095],{"class":692},"();\n",[345,1097,1098],{"class":347,"line":390},[345,1099,394],{"emptyLinePlaceholder":393},[345,1101,1102,1104,1106,1109,1112],{"class":347,"line":397},[345,1103,792],{"class":688},[345,1105,1081],{"class":688},[345,1107,1108],{"class":692}," SessionFactory ",[345,1110,1111],{"class":758},"buildSessionFactory",[345,1113,985],{"class":692},[345,1115,1116,1119],{"class":347,"line":403},[345,1117,1118],{"class":688},"        try",[345,1120,762],{"class":692},[345,1122,1123],{"class":347,"line":408},[345,1124,1125],{"class":890},"            \u002F\u002F Carga el archivo hibernate.cfg.xml desde la raíz del classpath\n",[345,1127,1128,1131,1134,1137,1140,1143,1145,1147],{"class":347,"line":414},[345,1129,1130],{"class":688},"            return",[345,1132,1133],{"class":688}," new",[345,1135,1136],{"class":758}," Configuration",[345,1138,1139],{"class":692},"().",[345,1141,1142],{"class":758},"configure",[345,1144,1139],{"class":692},[345,1146,1111],{"class":758},[345,1148,1095],{"class":692},[345,1150,1151,1154,1157,1160,1163],{"class":347,"line":420},[345,1152,1153],{"class":692},"        } ",[345,1155,1156],{"class":688},"catch",[345,1158,1159],{"class":692}," (Throwable ",[345,1161,1162],{"class":922},"ex",[345,1164,932],{"class":692},[345,1166,1167,1170,1173,1175,1178,1181],{"class":347,"line":426},[345,1168,1169],{"class":692},"            System.err.",[345,1171,1172],{"class":758},"println",[345,1174,734],{"class":692},[345,1176,1177],{"class":743},"\"Error al inicializar SessionFactory: \"",[345,1179,1180],{"class":688}," +",[345,1182,1183],{"class":692}," ex);\n",[345,1185,1186,1189,1191,1194],{"class":347,"line":431},[345,1187,1188],{"class":688},"            throw",[345,1190,1133],{"class":688},[345,1192,1193],{"class":758}," ExceptionInInitializerError",[345,1195,1196],{"class":692},"(ex);\n",[345,1198,1199],{"class":347,"line":436},[345,1200,1201],{"class":692},"        }\n",[345,1203,1204],{"class":347,"line":442},[345,1205,963],{"class":692},[345,1207,1208],{"class":347,"line":447},[345,1209,394],{"emptyLinePlaceholder":393},[345,1211,1212,1214,1216,1218,1221],{"class":347,"line":453},[345,1213,896],{"class":688},[345,1215,1081],{"class":688},[345,1217,1108],{"class":692},[345,1219,1220],{"class":758},"getSessionFactory",[345,1222,985],{"class":692},[345,1224,1225,1227],{"class":347,"line":459},[345,1226,990],{"class":688},[345,1228,1229],{"class":692}," sessionFactory;\n",[345,1231,1232],{"class":347,"line":465},[345,1233,963],{"class":692},[345,1235,1236],{"class":347,"line":470},[345,1237,394],{"emptyLinePlaceholder":393},[345,1239,1240,1242,1244,1247,1250],{"class":347,"line":475},[345,1241,896],{"class":688},[345,1243,1081],{"class":688},[345,1245,1246],{"class":688}," void",[345,1248,1249],{"class":758}," shutdown",[345,1251,985],{"class":692},[345,1253,1254,1257,1259,1262],{"class":347,"line":481},[345,1255,1256],{"class":758},"        getSessionFactory",[345,1258,1139],{"class":692},[345,1260,1261],{"class":758},"close",[345,1263,1095],{"class":692},[345,1265,1266],{"class":347,"line":486},[345,1267,963],{"class":692},[345,1269,1270],{"class":347,"line":492},[345,1271,1015],{"class":692},[304,1273,1275],{"id":1274},"implementar-la-lógica-de-persistencia","Implementar la Lógica de Persistencia",[309,1277,1278],{},"Ahora podemos usar la SessionFactory para guardar un objeto en la base de datos. Recuerda que todas las operaciones que modifican datos deben ejecutarse dentro de una transacción.",[309,1280,1281],{},"El flujo típico es:",[1283,1284,1285,1288,1291,1294,1297],"ol",{},[665,1286,1287],{},"Abrir una sesión.",[665,1289,1290],{},"Iniciar una transacción.",[665,1292,1293],{},"Realizar la operación (guardar, actualizar, eliminar).",[665,1295,1296],{},"Confirmar la transacción (commit) o revertirla (rollback) en caso de error.",[665,1298,1299],{},"Cerrar la sesión.",[336,1301,1303],{"className":679,"code":1302,"language":681,"meta":341,"style":341},"package com.app;\n\nimport com.app.entidades.Usuario;   \nimport com.app.utilidades.HibernateUtil;\nimport org.hibernate.Session;   \nimport org.hibernate.Transaction;\n\npublic class Main {\n    void main() {\n        \u002F\u002F Crear un nuevo usuario\n        Usuario nuevoUsuario = new Usuario(\"Juan Pérez\", \"jperez@correo.com\");\n        \n        \u002F\u002F Abrir una sesión y comenzar una transacción\n        Session session = HibernateUtil.getSessionFactory().openSession();\n        Transaction transaction = null;\n        \n        try {\n            transaction = session.beginTransaction();\n            session.save(nuevoUsuario); \u002F\u002F Guardar el usuario en la BD\n            transaction.commit(); \u002F\u002F Confirmar la transacción\n            System.out.println(\"Usuario guardado con ID: \" + nuevoUsuario.getId());\n        } catch (Exception e) {\n            if (transaction != null) {\n                transaction.rollback(); \u002F\u002F Revertir la transacción en caso de error\n            }\n            e.printStackTrace();\n        } finally {\n            session.close(); \u002F\u002F Cerrar la sesión\n        }\n        \n        \u002F\u002F No olvides cerrar la SessionFactory al finalizar la aplicación\n        HibernateUtil.shutdown();\n    }\n}\n",[331,1304,1305,1312,1316,1323,1330,1337,1344,1348,1359,1369,1374,1398,1403,1408,1427,1439,1443,1449,1464,1478,1492,1514,1528,1543,1556,1561,1571,1580,1591,1595,1599,1604,1614,1618],{"__ignoreMap":341},[345,1306,1307,1309],{"class":347,"line":348},[345,1308,689],{"class":688},[345,1310,1311],{"class":692}," com.app;\n",[345,1313,1314],{"class":347,"line":354},[345,1315,394],{"emptyLinePlaceholder":393},[345,1317,1318,1320],{"class":347,"line":360},[345,1319,702],{"class":688},[345,1321,1322],{"class":692}," com.app.entidades.Usuario;   \n",[345,1324,1325,1327],{"class":347,"line":366},[345,1326,702],{"class":688},[345,1328,1329],{"class":692}," com.app.utilidades.HibernateUtil;\n",[345,1331,1332,1334],{"class":347,"line":372},[345,1333,702],{"class":688},[345,1335,1336],{"class":692}," org.hibernate.Session;   \n",[345,1338,1339,1341],{"class":347,"line":378},[345,1340,702],{"class":688},[345,1342,1343],{"class":692}," org.hibernate.Transaction;\n",[345,1345,1346],{"class":347,"line":384},[345,1347,394],{"emptyLinePlaceholder":393},[345,1349,1350,1352,1354,1357],{"class":347,"line":390},[345,1351,752],{"class":688},[345,1353,755],{"class":688},[345,1355,1356],{"class":758}," Main",[345,1358,762],{"class":692},[345,1360,1361,1364,1367],{"class":347,"line":397},[345,1362,1363],{"class":688},"    void",[345,1365,1366],{"class":758}," main",[345,1368,985],{"class":692},[345,1370,1371],{"class":347,"line":403},[345,1372,1373],{"class":890},"        \u002F\u002F Crear un nuevo usuario\n",[345,1375,1376,1379,1381,1383,1385,1387,1390,1392,1395],{"class":347,"line":408},[345,1377,1378],{"class":692},"        Usuario nuevoUsuario ",[345,1380,943],{"class":688},[345,1382,1133],{"class":688},[345,1384,759],{"class":758},[345,1386,734],{"class":692},[345,1388,1389],{"class":743},"\"Juan Pérez\"",[345,1391,818],{"class":692},[345,1393,1394],{"class":743},"\"jperez@correo.com\"",[345,1396,1397],{"class":692},");\n",[345,1399,1400],{"class":347,"line":414},[345,1401,1402],{"class":692},"        \n",[345,1404,1405],{"class":347,"line":420},[345,1406,1407],{"class":890},"        \u002F\u002F Abrir una sesión y comenzar una transacción\n",[345,1409,1410,1413,1415,1418,1420,1422,1425],{"class":347,"line":426},[345,1411,1412],{"class":692},"        Session session ",[345,1414,943],{"class":688},[345,1416,1417],{"class":692}," HibernateUtil.",[345,1419,1220],{"class":758},[345,1421,1139],{"class":692},[345,1423,1424],{"class":758},"openSession",[345,1426,1095],{"class":692},[345,1428,1429,1432,1434,1437],{"class":347,"line":431},[345,1430,1431],{"class":692},"        Transaction transaction ",[345,1433,943],{"class":688},[345,1435,1436],{"class":708}," null",[345,1438,712],{"class":692},[345,1440,1441],{"class":347,"line":436},[345,1442,1402],{"class":692},[345,1444,1445,1447],{"class":347,"line":442},[345,1446,1118],{"class":688},[345,1448,762],{"class":692},[345,1450,1451,1454,1456,1459,1462],{"class":347,"line":447},[345,1452,1453],{"class":692},"            transaction ",[345,1455,943],{"class":688},[345,1457,1458],{"class":692}," session.",[345,1460,1461],{"class":758},"beginTransaction",[345,1463,1095],{"class":692},[345,1465,1466,1469,1472,1475],{"class":347,"line":453},[345,1467,1468],{"class":692},"            session.",[345,1470,1471],{"class":758},"save",[345,1473,1474],{"class":692},"(nuevoUsuario); ",[345,1476,1477],{"class":890},"\u002F\u002F Guardar el usuario en la BD\n",[345,1479,1480,1483,1486,1489],{"class":347,"line":459},[345,1481,1482],{"class":692},"            transaction.",[345,1484,1485],{"class":758},"commit",[345,1487,1488],{"class":692},"(); ",[345,1490,1491],{"class":890},"\u002F\u002F Confirmar la transacción\n",[345,1493,1494,1497,1499,1501,1504,1506,1509,1511],{"class":347,"line":465},[345,1495,1496],{"class":692},"            System.out.",[345,1498,1172],{"class":758},[345,1500,734],{"class":692},[345,1502,1503],{"class":743},"\"Usuario guardado con ID: \"",[345,1505,1180],{"class":688},[345,1507,1508],{"class":692}," nuevoUsuario.",[345,1510,982],{"class":758},[345,1512,1513],{"class":692},"());\n",[345,1515,1516,1518,1520,1523,1526],{"class":347,"line":470},[345,1517,1153],{"class":692},[345,1519,1156],{"class":688},[345,1521,1522],{"class":692}," (Exception ",[345,1524,1525],{"class":922},"e",[345,1527,932],{"class":692},[345,1529,1530,1533,1536,1539,1541],{"class":347,"line":475},[345,1531,1532],{"class":688},"            if",[345,1534,1535],{"class":692}," (transaction ",[345,1537,1538],{"class":688},"!=",[345,1540,1436],{"class":708},[345,1542,932],{"class":692},[345,1544,1545,1548,1551,1553],{"class":347,"line":481},[345,1546,1547],{"class":692},"                transaction.",[345,1549,1550],{"class":758},"rollback",[345,1552,1488],{"class":692},[345,1554,1555],{"class":890},"\u002F\u002F Revertir la transacción en caso de error\n",[345,1557,1558],{"class":347,"line":486},[345,1559,1560],{"class":692},"            }\n",[345,1562,1563,1566,1569],{"class":347,"line":492},[345,1564,1565],{"class":692},"            e.",[345,1567,1568],{"class":758},"printStackTrace",[345,1570,1095],{"class":692},[345,1572,1573,1575,1578],{"class":347,"line":498},[345,1574,1153],{"class":692},[345,1576,1577],{"class":688},"finally",[345,1579,762],{"class":692},[345,1581,1582,1584,1586,1588],{"class":347,"line":504},[345,1583,1468],{"class":692},[345,1585,1261],{"class":758},[345,1587,1488],{"class":692},[345,1589,1590],{"class":890},"\u002F\u002F Cerrar la sesión\n",[345,1592,1593],{"class":347,"line":509},[345,1594,1201],{"class":692},[345,1596,1597],{"class":347,"line":996},[345,1598,1402],{"class":692},[345,1600,1601],{"class":347,"line":1001},[345,1602,1603],{"class":890},"        \u002F\u002F No olvides cerrar la SessionFactory al finalizar la aplicación\n",[345,1605,1606,1609,1612],{"class":347,"line":1006},[345,1607,1608],{"class":692},"        HibernateUtil.",[345,1610,1611],{"class":758},"shutdown",[345,1613,1095],{"class":692},[345,1615,1616],{"class":347,"line":1012},[345,1617,963],{"class":692},[345,1619,1621],{"class":347,"line":1620},34,[345,1622,1015],{"class":692},[1624,1625,1626],"accordion",{},[1627,1628,1630],"accordion-item",{"label":1629},"Diagramas de Flujo",[1631,1632],"img",{"alt":1633,"src":1634},"deepseek_mermaid_20260323_6e3d7e.svg","\u002Fdeepseek_mermaid_20260323_6e3d7e.svg",[304,1636,1638],{"id":1637},"conclusión","Conclusión",[309,1640,1641],{},"Hibernate ORM es una herramienta poderosa que simplifica la gestión de la persistencia de datos en aplicaciones Java. Al mapear tus clases Java a tablas de base de datos, puedes trabajar con objetos en lugar de escribir consultas SQL, lo que mejora la productividad y reduce la cantidad de código necesario para gestionar la persistencia. Con una configuración adecuada y el uso correcto de sesiones y transacciones, Hibernate puede ayudarte a construir aplicaciones robustas y eficientes que interactúan con bases de datos de manera efectiva.",[1643,1644,1645],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}",{"title":341,"searchDepth":354,"depth":354,"links":1647},[1648,1649,1650,1651,1652,1653,1654,1655],{"id":306,"depth":354,"text":307},{"id":314,"depth":354,"text":315},{"id":325,"depth":354,"text":326},{"id":515,"depth":354,"text":516},{"id":656,"depth":354,"text":657},{"id":1025,"depth":354,"text":1026},{"id":1274,"depth":354,"text":1275},{"id":1637,"depth":354,"text":1638},"En este artículo se explicará cómo utilizar Hibernate ORM (Object-Relational Mapping) en Java para gestionar la persistencia de datos de manera eficiente y sencilla. Se discutirán los conceptos básicos de Hibernate, cómo configurar tu proyecto para usarlo, y se proporcionarán ejemplos prácticos de cómo mapear tus clases Java a tablas de base de datos y realizar operaciones CRUD utilizando Hibernate.","md",null,{"editButton":104},{"title":174,"description":1656},"VsQIPk_mP9E7QlmvY9ugTpIuUDynDqBsRBprjopi5zk",[1663,1665],{"title":170,"path":171,"stem":172,"description":1664,"children":-1},"En este artículo se explicará el patrón de diseño DAO (Data Access Object) y cómo implementarlo en Java para gestionar el acceso a datos de manera eficiente y organizada. Se discutirán los beneficios de utilizar el patrón DAO, cómo estructurar tu código para seguir este patrón y se proporcionarán ejemplos prácticos de implementación.",{"title":184,"path":180,"stem":181,"description":1666,"icon":185,"children":-1},"En este artículo se explicará qué es Android y Kotlin, sus características, cómo funcionan y el proceso de compilación y ejecución de aplicaciones Android utilizando Kotlin.",1775101374171]