Estoy trabajando en una aplicación web. Estamos utilizando Hibernate como ORM en nuestro proyecto. En realidad, nuestra aplicación crea algunas tablas de forma dinámica en función de la selección del usuario. El usuario puede seleccionar el nombre de la tabla, el nombre de la columna y luego puede importar datos desde un archivo csv. Entonces mi pregunta es: ¿cómo mapear esta tabla creada dinámicamente con objetos de Hibernate y Java?Cómo mapear tabla creada dinámicamente en Hibernate?
Respuesta
Se puede hacer de forma dinámica, pero es un poco desordenado:
Tendrá que modificar dinámicamente objeto de configuración de Hibernate antes de que se construyó SessionFactory. Si está utilizando Spring, puede hacerlo anulando el método postProcessAnnotationConfiguration()
de AnnotationSessionFactoryBean
; de lo contrario, solo tendrá que hacerlo utilizando su objeto de Configuración antes de invocar buildSessionFactory()
en él.
Si necesita hacer esto sin reiniciar la aplicación, está buscando ya sea reconstruir su SessionFactory (lo que significa que sus usuarios tendrán que esperar hasta que se haga) o usar una instancia separada de SessionFactory específicamente dedicada a sus clases personalizadas (que es casi imposible si sus clases personalizadas necesitan referenciar sus clases integradas).
Puede obtener acceso a asignaciones de clase/tabla a través del configuration.getMappings()
. A continuación, deberá crear una nueva asignación de tabla a través del Table API y agregarla a la configuración a través del addTable()
. Lo mismo tendrá que hacerse con PersistentClass que representa un mapeo de clase. Si está utilizando la misma clase para representar varias entidades (por ejemplo, mapear múltiples tablas), asegúrese de usar nombres de entidades únicos para cada una. Tendrás que hacer esto (modificar la configuración) en cada reinicio de la aplicación.
¿Cuántas de las tablas se crean dinámicamente? ¿Las tablas son similares y solo cambias el nombre de la base de datos?
Aquí es una discusión de cambiar el nombre de la tabla: http://www.experts-exchange.com/Programming/Languages/Java/J2EE/Frameworks/Spring/Q_24237099.html
Si usted está construyendo una nueva tabla por completo, se puede utilizar una vista, y la gente simplemente directos a una vista?
¿Por qué está utilizando Hibernate para esto, en lugar de solo crear dinámicamente consultas en JDBC?
La solución de base de datos: puede crear una vista y señalarla a una tabla u otra (suponiendo que la estructura sea idéntica).
CREATE VIEW HIBERNATE_NAME como SELECT * FROM TABLE_A
o CREATE VIEW HIBERNATE_NAME como SELECT * FROM TABLE_B
Sería necesario que la aplicación para ejecutar SQL nativo (DDL), sin embargo esto debería ser más fácil que Hibernate hacks
- 1. Consultar datos utilizando Entity Framework desde la tabla creada dinámicamente
- 2. creada dinámicamente matriz rectangular irregular
- 3. ¿Cómo mapear una propiedad de byte [] con Hibernate?
- 4. Cómo agregar una columna "creada en" en una tabla
- 5. Cómo agrego elementos dinámicamente a una vista creada con XML
- 6. WPF: Cómo agregar controles dinámicamente en la ventana WPF creada dinámicamente
- 7. controles no aparecen en el control de usuario creada dinámicamente
- 8. MySQL - consulta de la última tabla creada
- 9. hibernate compuesta La clave principal contiene una clave foránea compuesta, cómo mapear esto
- 10. ¿Generar tabla para mapear IPAddress como tipo INET en PostgreSQL?
- 11. Cómo mapear enum en JNA
- 12. ordenando dinámicamente un NamedQuery? Seam/Hibernate/JPA
- 13. Crear columnas de tabla dinámicamente en JSF
- 14. ¿Cómo resuelvo dinámicamente los parámetros del mensaje con Hibernate Validator?
- 15. ¿Cómo se muestra el código fuente para la función creada dinámicamente ("personalizada") en IPython?
- 16. ¿Cómo agregar dinámicamente una fila en una tabla en JSF?
- 17. Hibernate ConstraintViolationException en la tabla de combinación
- 18. ¿Por qué la ingeniería inversa de Hibernate de MyEclipse crea múltiples clases al mapear ciertas tablas?
- 19. ¿Cómo agregar dinámicamente filas a una tabla en ASP.NET?
- 20. cómo actualizar dinámicamente la vista de tabla en IOS?
- 21. Cómo mapear IDictionary <cadena, objeto> en Fluidez NHibernate?
- 22. ¿Cómo mapear la clave compuesta de entidad en JPA?
- 23. ¿Cómo puedo mapear una fecha de Java a DATETIME en mysql (de forma predeterminada es TIMESTAMP) con anotaciones de Hibernate
- 24. ¿Cómo volver a cargar una propiedad de configuración creada dinámicamente la próxima vez?
- 25. Cómo mapear una colección abstracta con jpa?
- 26. ¿Cómo mapear con índice en Ruby?
- 27. Cómo mapear int en enumeración con EF
- 28. cómo mapear la lista ordenada en nhibernate?
- 29. ¿Cómo puedo mapear una macro en Clojure?
- 30. Cómo mapear matrices JSON en RestKit
Estoy de acuerdo, el uso de Hibernate para este problema no es correcto. – sbidwai