Вам необходимо использовать XML-версию конфигурации, а не аннотации. Таким образом, вы можете динамически генерировать XML во время выполнения.
А может, что-то вроде Динамический JPA вас заинтересует?
Я думаю, что необходимо уточнить проблемы с этой проблемой.
Первый вопрос: известен ли набор таблиц, в которых можно хранить сущность? Под этим я подразумеваю, что вы не создаете таблицы динамически во время выполнения и не хотите связывать с ними сущности. Этот сценарий требует, чтобы, скажем, три таблицы были известны в время компиляции . Если это так, вы можете использовать наследование JPA. Документация OpenJPA детализирует таблицу для класса стратегия наследования.
Преимущество этого метода в том, что это чистый JPA. Однако он имеет ограничения, заключающиеся в том, что таблицы должны быть известны, и вы не можете легко изменить, в какой таблице хранится данный объект (если это требуется для вас), так же как объекты в ОО-системах обычно не изменяют класс или введите.
Если вы хотите, чтобы это было действительно динамично и для перемещения сущностей между таблицами (по сути), то я не уверен, что JPA - подходящий инструмент для вас. Огромное количество магии идет на работу JPA, включая ткачество во время загрузки (инструментарий) и, как правило, один или несколько уровней кэширования. Более того, менеджеру сущностей необходимо регистрировать изменения и обрабатывать обновления управляемых объектов. Я знаю, что нет простого способа проинструктировать менеджера сущностей о том, что данная сущность должна храниться в той или иной таблице.
Такая операция перемещения неявно потребует удаления из одной таблицы и вставки в другую. Если есть дочерние объекты, это становится сложнее. Не исключено, но это такой необычный угловой случай, я не уверен, что кто-нибудь когда-либо будет беспокоиться.
Низкоуровневая структура SQL / JDBC, такая как Ibatis , может быть лучше, поскольку она даст вам необходимый контроль.
Я также подумал о динамическом изменении или назначении аннотаций во время выполнения. Хотя я еще не уверен, возможно ли это, даже если это так, я не уверен, что это обязательно поможет. Я не могу себе представить, чтобы менеджер сущностей или кеширование не были безнадежно запутаны подобными вещами.
Другой возможностью, о которой я подумал, было динамическое создание подклассов во время выполнения (как анонимных подклассов), но это все еще имеет проблему с аннотациями, и опять же я не уверен, как вы добавите это в существующий модуль персистентности.
Это может помочь, если вы предоставите более подробную информацию о том, что вы делаете и почему. Что бы это ни было, я склоняюсь к мысли, что вам нужно переосмыслить то, что вы делаете или как вы это делаете, или вам нужно выбрать другую технологию персистентности.