2015-05-31 2 views
2

Предположим, что поставщик JPA находится в спящем режиме. Предположим, что это не управление контейнером, но приложение управляется.Создать таблицу программно из аннотации объекта под JPA

Учитывая класс сущности и правильную аннотацию, можно ли создать таблицу программно, во время выполнения и только для этого класса? Говоря о времени выполнения, это означает, что класс сущности не указан в файле persistence.xml.

Теоретически это возможно, потому что мы можем вручную читать аннотации и генерировать SQL, а из единицы сохранения мы можем прочитать URL-адрес подключения к базе данных. Мой вопрос в том, есть ли способ сделать это, не дублируя много работы внутри спящего режима?

Я нашел в других вопросах о том, что можно использовать Persistence.createSchema, но я не вижу, где указать класс.

+0

Поскольку спецификация JPA достаточно ясно говорит о том, что вызов Persistence.generateSchema занимает блок персистентности, который бы ОПРЕДЕЛ, какие классы находятся в этом блоке. –

+0

@NeilStockton, как я уже сказал, я хотел бы видеть, что класс сущности не определен в модуле сохранения, но указан во время выполнения. 'Persistence.generateSchema' принимает только имя единицы сохранения, как я могу добавить класс в блок персистентности во время выполнения? –

ответ

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

  2. Вы можете либо сгенерировать всю схему базы данных из аннотации JPA, либо не создать ее для любого объекта. Вы не можете генерировать определение таблицы только для одного объекта.

Ваш случай использования пахнет как хак, и вам, вероятно, следует сначала обратиться к этому требованию.

+0

Требование состоит в том, что система содержит плагины, которые могут быть загружены во время выполнения, поэтому сущность не может быть жестко закодирована для persistence.xml. И не безумие избегать загрузки всех объектов во всех плагинах, а только необходимых плагинов. Должен ли загружаться плагин, указан во время выполнения. Это требование взломало? Я так не думаю. –

+0

Тогда вам понадобится больше единиц сохранения в этом случае. –

+0

, то знаете ли вы, как набирать единицы настойчивости на лету? –

Смежные вопросы