Специальные значения columnDefinition для базы данных Hibernate - PullRequest
9 голосов
/ 22 декабря 2009

проблема заключается в следующем: мы используем спящий режим с аннотациями в качестве O / R Mapper.

Некоторые аннотации @Column выглядят так:

@Column(columnDefinition = "longblob", name = "binaryData", nullable = true)

или

@Column(columnDefinition = "mediumtext", name = "remark", nullable = true)

с атрибутами columnDefinition, специфичными для mysql

на postgres, например, значения columnDefinition должны быть "bytea" и "varchar (999999)"

а на оракуле возможно что-то еще.

В настоящее время возникают проблемы во время экспорта схемы, например, при создании операторов DDL.

Возможные обходные пути, о которых я могу подумать: - Взломать драйвер JDBC, который заменяет текст (например, longblob-> bytea) для операторов DDL. Это некрасиво, но будет работать как-то - Использовать конфигурацию hibernate xml вместо аннотаций. Это, вероятно, будет работать, но я предпочитаю аннотации

Кто-нибудь знает альтернативы? Hibernate конкретные обходные пути в порядке, например, если атрибут columnDefinition может содержать определенные значения диалекта, такие как

@Column(columnDefinition = "mysql->mediumtext, postgres->varchar(999999)", name = "remark", nullable = true)

Спасибо Хольгер

Ответы [ 2 ]

9 голосов
/ 22 декабря 2009

Почему бы вам не использовать независимые от базы данных аннотации, такие как:

  • @Lob (для свойства byte[] или String)
  • @Column(length=90000) (в собственности String)

и посмотрите, какие столбцы будут сгенерированы в базе данных. Скорее всего, они будут того типа, который вам нужен.

4 голосов
/ 22 декабря 2009

Некоторые идеи:

  • Используйте аннотации в целом, но перегружайте их из Xml в случае, если они относятся к вашей базе данных. Тогда у вас может быть один файл конфигурации, специфичный для вашей базы данных.
  • Используйте Java-константы в своих аннотациях (они должны быть константами времени компиляции, поэтому вы ограничены). Вы можете иметь несколько наборов констант Java и указывать на тот, в который вы хотите экспортировать. (Осторожно, когда вы указываете на другую константу, вы должны все перекомпилировать.)
  • Я также использовал диалект для переключения некоторого кода в моем классе конфигурации . Класс конфигурации получает все данные (из аннотаций или XML) и может затем обработать их.

    Например, я изменил символ конкатенации с '||' в Oracle - '+' на SqlServer.
    Это удобно делать во время выполнения: -)

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