2016-07-24 3 views
0

У меня есть класс сущностей, как следующее:Hibernate создать таблицу с именем спасся

@Entity 
public class perm { 

    @Id 
    @GeneratedValue 
    private Long id; 

    private boolean add; 

    // Getter & Setter are also there ... 
} 

Когда я начинаю весной (с JPA спящий режим), он генерирует следующий CREATE TABLE заявление для моей базы данных MySQL:

create table perm (id bigint not null auto_increment, add bit not null, primary key (id)) 

Это создать не получится, так как имя столбца add не отделался

` 

нравится, как обычно.
Обычно я хотел бы создать его вручную с помощью следующего кода:

create table perm (`id` bigint not null auto_increment, `add` bit not null, primary key (`id`)) 

Конечно, я мог бы создать ImprovedNamingStrategy для того, чтобы манипулировать все имена столбцов, установив префикс или суффикс к ним. Но тогда все мои колонки имеют этот синтаксис.

Теперь мой вопрос:
Может быть, jpaProperty, который избегает имени столбца, каждый раз, когда он используется внутри синтаксиса sql? Сначала я подумал, что это уже будет сделано, когда я установлю свой

jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");` 

Но, по-видимому, это не так. Может быть, для этого есть еще одна настройка?

ответ

0

add является зарезервированным ключевым словом в Mysql, как вы можете видеть здесь https://dev.mysql.com/doc/refman/5.7/en/keywords.html

Вы лучше избегать его использования. Альтернативой может быть использование isAdded.

В случае, если вы не можете изменить имя столбца, используйте это, чтобы инструктировать Hibernate:

@Column(name="[add]") 
private boolean add; 
+0

Я знаю это. Но, как я уже сказал в своем вопросе: я не хочу изменять это имя столбца, а также все имена столбцов по стратегии именования. Я хочу, чтобы hibernate корректно удалял имена столбцов. Потому что я не могу позволить себе столкнуться с подобной ошибкой в ​​будущем. Подобная «ошибка» не сообщается в консоли. hibernate генерирует таблицы и ничего не говорит о том, чтобы не создать ни одного. – christopher2007

+0

Использование '@Column (name =" [add] ")', Hibernate автоматически удалит ваше имя столбца. – Rocherlee

+0

Кроме того, это не проблема с гибернацией. Каждая база данных имеет другой список зарезервированных ключевых слов, поэтому вам нужно самому справиться с этим. – Rocherlee

2

Добавить @Column аннотацию к полю:

@Entity 
public class perm { 

    @Id 
    @GeneratedValue 
    private Long id; 
    @Column(name="`add`") 
    private boolean add; 

    // Getter & Setter are also there ... 
} 

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

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