Как отобразить динамически создаваемую таблицу в Hibernate? - PullRequest
6 голосов
/ 02 октября 2009

Я работаю над веб-приложением. Мы используем Hibernate в качестве ORM в нашем проекте. На самом деле наше приложение создает несколько таблиц динамически на основе выбора пользователя. Пользователь может выбрать имя таблицы, имя столбца, а затем он / она может импортировать данные из CSV-файла. Поэтому мой вопрос: как отобразить эту динамически созданную таблицу с объектами Hibernate и Java?

Ответы [ 3 ]

10 голосов
/ 02 октября 2009

Это может быть сделано динамически, но это несколько грязно:

Вам нужно будет динамически изменить объект конфигурации Hibernate перед созданием SessionFactory. Если вы используете Spring, это можно сделать, переопределив postProcessAnnotationConfiguration() метод AnnotationSessionFactoryBean; в противном случае вам просто нужно будет сделать это с помощью объекта конфигурации, прежде чем вызывать buildSessionFactory() для него.

Если вам нужно сделать это без перезапуска приложения, вы рассматриваете либо перестройку SessionFactory (что означает, что вашим пользователям придется ждать, пока это не будет сделано), либо использование отдельного экземпляра SessionFactory, специально выделенного для ваших пользовательских классов ( почти невозможно, если ваши пользовательские классы должны ссылаться на ваши встроенные классы).

Вы можете получить доступ к отображению классов / таблиц через configuration.getMappings(). Затем вам нужно будет создать новое отображение таблиц с помощью Table API и добавить его в конфигурацию с помощью addTable(). То же самое должно быть сделано с PersistentClass , который представляет отображение класса. Если вы используете один и тот же класс для представления нескольких сущностей (например, сопоставление нескольких таблиц), убедитесь, что вы используете уникальные имена сущностей для каждой из них. Вам придется делать это (изменять конфигурацию) при каждом перезапуске приложения.

2 голосов
/ 02 октября 2009

Сколько таблиц создается динамически? Таблицы похожи, и вы просто меняете имя базы данных?

Вот обсуждение изменения имени таблицы: http://www.experts -exchange.com / Программирование / Языки / Java / J2EE / Frameworks / Spring / Q_24237099.html

Если вы полностью строите новую таблицу, можете ли вы использовать представление и просто направлять людей к представлению?

Почему вы используете Hibernate для этого, а не просто для динамического создания запросов в JDBC?

0 голосов
/ 01 августа 2013

Решение для базы данных - вы можете создать представление и указать его на ту или иную таблицу (при условии, что структура идентична).

CREATE VIEW HIBERNATE_NAME как SELECT * FROM TABLE_A

или CREATE VIEW HIBERNATE_NAME как SELECT * FROM TABLE_B

Вам понадобится ваше приложение для выполнения собственного SQL (DDL), однако это должно быть проще, чем Hibernate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...