2015-06-11 1 views
0

название говорит все, я работаю над уровнем данных на основе JPA2 (через Hibernate 4.0), который должен быть агностиком базы данных, и я пытаюсь вернуться является ли столбец таблицы (связанный с @Entity) нулевым, какой тип и, что самое важное, если это varchar, как долго это происходит.JPA2 получить метаданные столбца (тип, lenth, nullable и т. Д.)

ответ

0

Вы можете создать агностическую модель базы данных с JPA @ Entity, что означает, что ваша модель будет работать с использованием другой БД.

Обычно вы кодируете свой @Entity, генерируете правильный DDL, используя инструмент SchemaGenerator (или другой инструмент), который будет создавать правильные операторы для конкретной базы данных (с использованием указанного диалекта). Ваша схема не зависит от базы данных, но во время выполнения должен быть указан правильный диалект.

Имейте в виду, что некоторые механизмы генерации ключей недоступны для некоторых БД, и их следует избегать, чтобы быть по-настоящему аглогическим.

Используя аннотацию @Column в поле, вы можете определить значение NULL, длину и т. Д. Если вы используете свойство «тип данных», ваша ответственность будет за использование кросс-DB-типа, если вы хотите оставаться агностиком DB.

Есть также другие @Temporal & @ Необработанные, которые могут влиять на генерируемые типы данных.

- Альтернативная

Можно также отобразить существующую таблицу сущностей. Есть также инструменты, которые это сделают. Например: http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jpt.doc.user%2Ftasks021.htm

Учтите, что вам, возможно, придется немного настроить отображение/модель, чтобы быть по-настоящему агностиком базы данных, поскольку отображение сгенерированного @ Entity может отражать некоторые типы данных базы данных, которые использовались для создания модели в первое место.

Насколько я знаю, JPA является агностиком DB самостоятельно, если вы не зацикливаете типы данных или не используете механизм поддержки ключей без поддержки. Это правильная структура для создания агностических моделей БД.

Даже если это возможно, я не верю, что JPA - это правильный инструмент для проверки типов DB - это время выполнения. Поэтому, если «получить» вы имеете в виду проверку и адаптацию во время выполнения ... вам может быть лучше использовать прямой JDBC. Если вам нужно проверять БД во время выполнения и соответственно реагировать, это противоположно агностическому коду БД, вы рассматриваете все возможные случаи.

+0

У меня уже есть база данных, и я не хочу дублировать данные в коде, но, похоже, нет другого хорошего способа ... :( – zacaj

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

  • Нет связанных вопросов^_^