Можно ли создать имя столбца с пробелами, используя спящий режим? - PullRequest
8 голосов
/ 24 августа 2010

Я строю систему баз данных для электронных компонентов. К сожалению, другие программы, которые будут использовать некоторые из моих таблиц, должны иметь пробелы в именах столбцов. Я пробовал в моем файле hbm.xml что-то вроде этого со свойством:

...

property name = "partGroup" column = "part group" type = "string"

...

конечно, hibernate не будет создавать таблицу с именем этого столбца.

Есть ли способ сделать это с помощью гибернации?

Спасибо:]

Ответы [ 2 ]

12 голосов
/ 24 августа 2010

Есть способ заключить имена таблиц или столбцов в кавычки. Из документации:

5,4. SQL-идентификаторы в кавычках

Вы можете заставить Hibernate цитировать идентификатор в сгенерированном SQL по заключая имя таблицы или столбца в кавычки в документе сопоставления. Hibernate будет использовать правильный стиль цитаты для диалекта SQL. Обычно это двойные кавычки, но SQL Server использует скобки и MySQL использует backticks.

<class name="LineItem" table="`Line Item`">
    <id name="id" column="`Item Id`"/><generator class="assigned"/></id>
    <property name="itemNumber" column="`Item #`"/>
    ...
</class>
0 голосов
/ 11 августа 2012

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

  1. Я создал следующий класс:

    import org.hibernate.cfg.DefaultNamingStrategy;
    
    public class MysqlAdvancedNamingStrategy extends DefaultNamingStrategy{
    
    <pre><code>@Override
    public String columnName(String columnName) {
        return "`"+super.columnName(columnName)+"`";
    }
    
    @Override
    public String tableName(String tableName) {
        return "`"+super.tableName(tableName)+"`";
    }
    </code>
    }
  2. У меня былустановив namingStrategy «MysqlAdvancedNamingStrategy» в предыдущем пункте.

Преимущества этого решения в том, что вам не нужно изменять все аннотации в вашем коде.

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

Это также чистое решение, если вы используете Spring Framework, с помощью которого вы можете изменить стратегию экранирования безкасаясь java-кода, устанавливая bean-компонент в фабрике сеансов с помощью id="namingStrategy" и class="util.MysqlAdvancedNamingStrategy".

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