relaciones que makigas ejemplo java hibernate spring-mvc datapersistance

que - jpa hibernate java



¿Cómo agregar dinámicamente la Entidad en Hibernate? (7)

Soy un desarrollador de Java. Estoy usando spring 4.0.1 y hibernate 4.2.21 . Tengo una clase como sigue:

@Entity @Inheritance(...) public abstract class Feature{ @Id @GeneratedValue protected Long id; ... }

Ahora tengo algunas clases como sigue:

Clase Label.java:

@Entity public class Label extends Feature{ protected String str; ... }

Clase de Point.java:

@Entity public class Point extends Feature{ protected Integer intg; ... }

Tengo más de 20 clases de entidad que se extienden desde la clase de entidad. ¿Hay alguna forma de agregar dinámicamente estas clases (como Label y Point ) al proyecto sin escribir código de disco duro?

actualización :

Por ejemplo, Hibernate obtiene datos de una base de datos y luego, de acuerdo con estos datos, crea modelos.

  1. ¿Es posible?
  2. ¿Como lo hago?

Creo que no es un buen diseño de base de datos que deba cambiarse dinámicamente. Suena verboso y no consistente. Observe su dominio nuevamente e intente diseñar una relación de entidad adecuada que no se modifique en el tiempo de ejecución.


Creo que podrías hacer esto con eclipse, pero las clases tuvieron que ser modificadas más o menos para preservar la jerarquía de herencia.

  • Haga clic derecho en el nombre del proyecto y seleccione Propiedades
  • Usar facetas del proyecto si las facetas del proyecto no están habilitadas

  • Haga clic en la JPA si no está seleccionada, luego haga clic en Aceptar para cerrar la ventana de propiedades del proyecto.

  • Después de habilitar JPA en las propiedades del proyecto, ahora haga clic con el botón derecho del mouse nuevamente en el nombre del proyecto eclipsado, debería ver que aparece un nuevo elemento de menú contextual en el que aparecen las herramientas JPA . Elija Generar Entidades a partir de tablas

Seleccione una conexión de base de datos para que Eclipse obtenga las tablas utilizadas para generar la clase.

Aquí es cómo configurar db en eclipse

  • Es mejor crear las entidades en un proyecto ficticio utilizando el método anterior y copiar las clases de Entidad al proyecto real.

  • La refactorización de clase de Eclipse se puede usar para preservar la jerarquía de herencia que desee.

Espero que esto ayude.


Creo que puedes usar Hibernate Reverse Engineering para generar Entidad para todas las tablas de la base de datos. Por favor, consulte this enlace. Eso explicará el proceso paso a paso para generar una entidad desde la base de datos utilizando la ingeniería inversa de hibernación.


Creo que quieres generar tu clase de entidad en tiempo de ejecución en lugar de eso, tienes que escribir tu archivo java y compilarlo, y así sucesivamente. Si este es su requisito, puede usar un generador de códigos de bytes como javassist para generar y anotar su archivo de clase en tiempo de ejecución. Luego, puede persistir en su tabla utilizando JPA, Hibernate y cualquier otro marco ORM. Estoy escribiendo una base de generador de clase en un archivo xml. En los próximos días se terminará y le daré un enlace a mi github. Así que puedes usar eso para generar tus clases de entidad. que tengas un buen día:)


Puede intentar recopilar los datos necesarios para compilar el modelo y generar un archivo hbm.xml hibernación para cada entidad (es un formato xml y es fácil de generar con java después de leer los datos necesarios como describe en su actualización)

Después de eso, puede crear un objeto de configuración de hibernación programáticamente siguiendo este http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html#configuration-programmatic

Creo que con ese enfoque puede lograr lo que quiere si entiendo bien su pregunta.


Según entiendo que necesita desarrollar una herramienta, recopila nombres de tablas que tienen una relación de uno a uno con la tabla de Feature .

Mi sugerencia es así (probado con Oracle):

1) Desde su base de datos, obtenga los metadatos de las tablas que hacen referencia a su tabla de características. A continuación, se imprimirán las tablas de etiquetas, puntos, etc. que tengan una relación de clave externa con la tabla.
Si solo desea generar un subconjunto (las tablas irrelevantes también podrían tener esta relación) puede colocar un nombre de columna de clave externa común y filtrar las tablas no relacionadas con la ayuda de dicha marca.

Connection connection = jdbcTemplate.getDataSource().getConnection(); DatabaseMetaData metaData = connection.getMetaData(); ResultSet exportedKeys = metaData.getExportedKeys(connection.getCatalog(), "<your_schema_name>", "FEATURE"); while (exportedKeys.next()){ String fkTableName = exportedKeys.getString("FKTABLE_NAME"); String fkColumnName = exportedKeys.getString("FKCOLUMN_NAME"); System.out.println("[fkTableName:" + fkTableName + "], [fkColumnName" + fkColumnName + "]"); } exportedKeys.close();


2) Para las tablas que recopiló anteriormente, para cada tabla de nuestra preocupación, obtenga metadatos de tabla para los tipos y columnas.

ResultSet columns = metaData.getColumns(connection.getCatalog(), "<your_schema_name>", "<your_table_name>", null); while (columns.next()){ String columnName = columns.getString("COLUMN_NAME"); String typeName = columns.getString("TYPE_NAME"); System.out.println("[columnName:" + columnName + "], [typeName" + typeName + "]"); } columns.close();


3) De acuerdo con el resultado de 2 genere sus clases de Java. Con campos, configuradores getter, anotaciones, etc. Luego, cópielos en su directorio de origen. Tu sabes el resto :)

Espero que esto sea de ayuda.


No te repitas a ti mismo.

Si realmente necesitas esas clases, usa un IDE (como eclipse) para generar las clases. O use los genéricos y la herencia para crear una sola clase que sea capaz de almacenar cadenas y enteros.

Pero si realmente no necesita clases, genere SQL (no JPQL ni HQL) y almacene los datos en java.util.Map y estructuras de datos similares.

Las clases son buenas para:

  • tipo de seguridad
  • combinando lógica (métodos) con datos (campos)
  • describiendo relaciones

En tu caso solo podrías necesitar:

  • almacenar datos estructurados en tiempo de ejecución.