Java EE / JPA способ добавления новых таблиц / сущностей в базу данных - PullRequest
5 голосов
/ 28 декабря 2011

У меня есть база данных mysql, в которую я хочу добавить функцию добавления новой таблицы в базу данных.Вероятно, я мог бы легко найти пример JPQL для этого, но как тогда я автоматически сгенерировал бы сущность для этой новой таблицы, чтобы я мог ссылаться на нее в оставшейся части моего кода JPA для обновления и удаления из таблицы, на которую я обычно ссылаюсьне сама таблица.

Сущности, которые у меня есть, я использовал eclipe для генерации из созданных мною таблиц.Но после развертывания у нас, очевидно, не будет Eclipse, чтобы делать это, поэтому мы должны делать это автоматически при каждом создании таблицы.

Ответы [ 3 ]

7 голосов
/ 28 декабря 2011

Динамическое создание и отображение новых таблиц - это не то, что поддерживает JPA. Это потребует создания новых классов Java на лету и динамического обновления метаданных отображения. Вы можете делать все, что вы хотите с JDBC или нативными запросами. Но, возможно, вам следует объяснить, почему вам нужно создавать новые таблицы на лету.

3 голосов
/ 28 декабря 2011

Существует несколько способов создания таблиц. Наиболее распространенным для производственного использования является то, что администратор БД (или разработчик в этой роли) создает схему базы данных (таблицы и т. Д.) Независимо от приложения.

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

Можно разрешить провайдеру JPA автоматически создавать схему. В аннотациях JPA есть даже несколько атрибутов, специально предназначенных для этой цели (например, атрибут nullable JoinColumn).

Активация этого происходит со специфическими для провайдера свойствами в файле persistence.xml. Например. hibernate.hbm2ddl.auto для Hibernate (как используется в JBoss AS) и eclipselink.ddl-generation для EclipseLink (как используется в GlassFish).

См. http://wiki.eclipse.org/EclipseLink/Examples/JPA/Migration/JBoss для некоторых примеров.

Вставка сущности в таблицу - это совсем другое. От вашего вопроса как-то складывается ощущение, что вы, возможно, не до конца понимаете разницу между этими двумя. Это происходит, например, через EntityManager#persist, но я не уверен на 100%, если это то, что вы спрашиваете.

1 голос
/ 28 декабря 2011

вы можете настроить свойства hibernate или файл persistence.xml для обновления базы данных при запуске сервера. это сделает обновления таблицы автоматически. посмотрите рядом с параметром hibernateDialect.

<property name="hibernate.hbm2ddl.auto" value="update" /> 

это то, что вы хотите. я не думаю, что вы хотите создавать классы сущностей на лету и хотите, чтобы таблицы создавались без повторного развертывания, как говорит @JB Nizet в своем ответе.

...