Hibernate схема именования отличается между ОС - PullRequest
6 голосов
/ 02 июня 2011

Я столкнулся с проблемой, что имена сгенерированных в спящем режиме схем (например, имена таблиц) различаются в Windows и Linux. В Windows все имена таблиц имеют небольшой регистр, например account, тогда как в Linux имена созданных таблиц являются верблюжьими, например, Account.

В обеих системах я использую MySQL 5 в той же версии и следующей конфигурации hibernate:

<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.jdbc.batch_size">0</prop>
<prop key="hibernate.bytecode.provider">cglib</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop> 

Что здесь происходит? В принципе, я могу жить с этой странной проблемой, но иногда это раздражает, я не могу просто экспортировать свои таблицы из моей Windows IDE в мою среду Linux.

Ответы [ 3 ]

8 голосов
/ 03 июня 2011

Возможно, вы захотите установить для свойства hibernate.ejb.naming_strategy значение org.hibernate.cfg.ImprovedNamingStrategy или реализовать собственный класс стратегии именования.

5 голосов
/ 03 июня 2011

К сожалению, именно так MySQL работает на чувствительных к регистру файловых системах (у меня была та же проблема на Mac с файловой системой, нечувствительной к регистру).Чтобы решить эту проблему, вам необходимо указать имя для таблиц самостоятельно.

Например,

@Entity
@Table(name="user")
public class User implements Serializable {
    ...
}

Имя таблицы должно быть написано только строчными буквами!Таким образом, вы можете быть уверены, что MySQL будет правильно именовать таблицу.

Просто, чтобы быть понятным, проблема не в гибернации, а в том, как mysql обрабатывает имена таблиц.

0 голосов
/ 16 июля 2015

Казалось очевидным, что возникла проблема с именами или регистром.

Я изменил следующее на строчные, и это решило проблему:

  1. Имена столбцов в таблице(s)
  2. Имена таблиц
  3. Я также изменил имя базы данных, потому что я использовал подход дробовика.
  4. Все ссылки на вышеупомянутые в .java и* .hbm.xml file (s)

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

Я также выбрал этот подход, потому что он казался простым и загадочным.И если это не помогло, я бы попробовал другую технику и решение.

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

Это базовое решение для метаданных, а не незнакомое решение для кода.

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

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