Изменение целевой таблицы для отображения Hibernate - PullRequest
1 голос
/ 22 сентября 2009

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

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

У вас есть идеи, как подойти и решить эту проблему?

Ответы [ 4 ]

5 голосов
/ 22 сентября 2009

Краткий ответ - нет. Определение отдельного сопоставления (через имя сущности) - путь.

Длинный ответ - это возможно путем манипулирования Конфигурацией во время выполнения до создания SessionFactory. Вы можете получить сопоставление для рассматриваемой сущности из сопоставлений, как определено в разделе «Конфигурация», скопировать его под новым именем сущности и связать с копией базовой таблицы под новым именем. По сути, вы по-прежнему определяете отдельное отображение, но делаете это трудным путем.

Взгляните на этот вопрос .

2 голосов
/ 22 сентября 2009

Как уже упоминалось @ ChssPly76, вы можете перепрыгивать через API-интерфейсы Hibernate, чтобы получить необработанную конфигурацию, изменить их и создать себе новый SessionFactory.

Другим столь же неприятным решением было бы использовать XSLT, чтобы взять файл конфигурации сопоставления и заменить имя таблицы на что-то другое, а затем передать этот измененный файл в спящий режим для создания нового SessionFactory.

Это довольно неприятно, но это означает, что вы можете избежать попадания в глубины Hibernate.

0 голосов
/ 22 сентября 2009

Можно ли использовать суперкласс? Если данные имеют всю одинаковую информацию о сопоставлении, но принадлежат другой таблице, тогда вы можете поместить сопоставления в общий родительский класс обеих сущностей. Используйте сопоставленный суперкласс для определения общих свойств, затем определите каждый конкретный класс как отдельную сущность, наследуйте свойства. В аннотациях гибернации это выполняется с помощью аннотации @MappedSuperclass на родительском элементе.

0 голосов
/ 22 сентября 2009

Как сказано,

Если данные не могут быть обработаны, они сохраняются в таблице ошибок для последующего анализа

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

С уважением,

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