transacciones registro proyecto insertar eliminar configurar conectar con como cfg agregar java hibernate orm

java - registro - insertar con hibernate



¿Ubicación de hibernate.cfg.xml en el proyecto? (10)

Creé un proyecto con la siguiente estructura:

HibernateUtil:

public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { // Create the SessionFactory from hibernate.cfg.xml Configuration configuration = new Configuration().configure( "C://Users//Nikolay_Tkachev//workspace//hiberTest//src//logic//hibernate.cfg.xml"); return new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } public static void shutdown() { // Close caches and connection pools getSessionFactory().close(); } }

en línea

Configuration configuration = new Configuration().configure( "C://Users//Nikolay_Tkachev//workspace//hiberTest//src//logic//hibernate.cfg.xml");

Tengo error

Excepción en la creación de SessionFactory.org.hibernate.HibernateException: C: / Users / Nikolay_Tkachev / workspace / hiberTest / src / logic / hibernate.cfg.xml No se encuentra Exception en el hilo "main" java.lang.ExceptionInInitializerError at logic.Hect (HibernateUtil.java:19) en logic.HibernateUtil. (HibernateUtil.java:9) en logic.Main.main (Main.java:12) Causado por: org.hibernate.HibernateException: C: / Users / Nikolay_Tkachev / workspace / hiberTest / src / logic / hibernate.cfg.xml no se encontró en org.hibernate.internal.util.ConfigHelper.getResourceAsStream (ConfigHelper.java:173) en org.hibernate.cfg.Configuration.getConfigurationInputStream org.hibernate.cfg.Configuration.configure (Configuration.java:1928) en logic.HibernateUtil.buildSessionFactory (HibernateUtil.java:14) ... 2 más

¿Cuál es la razón del error y cómo lo soluciono?


De alguna manera, colocar en la carpeta "src" no me funcionó.

En lugar de colocar cfg.xml como a continuación:

[Project Folder]/src/main/resources/hibernate.cfg.xml

trabajó. Usando este codigo

new Configuration().configure().buildSessionFactory().openSession();

en un archivo bajo

[Project Folder]/src/main/java/com/abc/xyz/filename.java

Además tiene este fragmento de código en hibernate.cfg.xml

<mapping resource="hibernate/Address.hbm.xml" /> <mapping resource="hibernate/Person.hbm.xml" />

Coloca los archivos hbm.xml anteriores debajo de:

EDITAR:

[Project Folder]/src/main/resources/hibernate/Address.hbm.xml [Project Folder]/src/main/resources/hibernate/Person.hbm.xml

Sobre estructura trabajada.


En el caso de un Proyecto Maven, cree una carpeta llamada recursos en la carpeta src / main y agregue la carpeta de recursos como una carpeta de origen en su ruta de clase.

Puede hacerlo yendo a Configurar ruta de acceso de compilación y luego haciendo clic en Agregar carpeta a la pestaña Fuentes.

A continuación, compruebe la carpeta de recursos y haga clic en Aplicar.

Luego solo usa:

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();


Este es un ejemplo de realidad cuando personaliza la estructura de carpetas: estructura de carpetas e inicializa la clase HibernateUtil

con:

return new Configuration().configure("/config/hibernate.cfg.xml").buildSessionFactory();

cartografía:


con personalizar los archivos de mapeo de entidades:

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <mapping class="com.vy.entities.Users"/> <mapping class="com.vy.entities.Post"/> <mapping resource="config/Users.hbm.xml"/> <mapping resource="config/Post.hbm.xml"/> </session-factory> </hibernate-configuration>

(Nota: la forma más sencilla, si sigue la forma predeterminada, significa que debe colocar todos los archivos de configuración XML en la carpeta src , cuando compile sessionFactory, solo:

return new Configuration().configure().buildSessionFactory();

)


Indique el camino relativo a su proyecto.

Cree una carpeta llamada resources en su src y ponga allí su archivo de configuración.

configuration.configure("/resources/hibernate.cfg.xml");

Y si compruebas tu código

Configuration configuration = new Configuration().configure( "C://Users//Nikolay_Tkachev//workspace//hiberTest//src//logic//hibernate.cfg.xml"); return new Configuration().configure().buildSessionFactory();

En dos líneas estás creando dos objetos de configuración.

Eso debería funcionar (no he probado) si escribes,

Configuration configuration = new Configuration().configure( "C://Users//Nikolay_Tkachev//workspace//hiberTest//src//logic//hibernate.cfg.xml"); return configuration.buildSessionFactory();

Pero falla después de implementar en el servidor, ya que está utilizando la ruta del sistema que la ruta relativa del proyecto.


Intenta a continuación el código que solucionará tu problema.

Configuration configuration = new Configuration().configure("/logic/hibernate.cfg.xml");


Mi problema fue que tenía un padre excelente en la carpeta de recursos. Después de quitarlo

config.configure();

trabajó para mi. Con la estructura src / java / ... HibernateUtil.java y el archivo cfg bajo src / resources.


Otra razón por la que se produce esta excepción es si llama al método de configuración dos veces en un objeto de Configuration o Configuration AnnotatedConfiguration como este:

AnnotationConfiguration config = new AnnotationConfiguration(); config.addAnnotatedClass(MyClass.class); //Use this if config files are in src folder config.configure(); //Use this if config files are in a subfolder of src, such as "resources" config.configure("/resources/hibernate.cfg.xml");

Por cierto, esta estructura de proyecto está dentro de eclipse.


Para cualquier persona interesada: si está utilizando Intellj , simplemente coloque hibernate.cfg.xml debajo de src/main/resources .


Puede colocar el archivo "hibernate.cfg.xml" en la carpeta src (src / hibernate.cfg.xml) y luego iniciar la configuración como el código a continuación:

Configuration configuration = new Configuration(); sessionFactory =configuration.configure().buildSessionFactory();


Usar el método configure () dos veces es responsable del problema para mí. En lugar de usar así:

Configuration configuration = new Configuration().configure(); configuration.configure("/main/resources/hibernate.cfg.xml");

Ahora, estoy usando así, el problema ya no existe.

Configuration configuration = new Configuration(); configuration.configure("/main/resources/hibernate.cfg.xml");

PS: Mi archivo hibernate.cfg.xml se encuentra en "src / main / resources / hibernate.cfg.xml", también. El código que más me gusta funciona para mí. en hibernate-5

public class HibernateUtil { private static SessionFactory sessionFactory ; static { try{ Configuration configuration = new Configuration(); configuration.configure("/main/resources/hibernate.cfg.xml"); StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); sessionFactory = configuration.buildSessionFactory(builder.build()); } catch(Exception e){ e.printStackTrace(); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }