Проблемы с именем столбца в спящем режиме

@Column(name="DateOfBirth")
private Date dateOfBirth;

Мне особенно нужен приведенный выше код для создания столбца с именем "DateOfBirth", вместо этого Hibernate дает мне столбец с именем date_of_birth. Как я могу это изменить? Есть ли свойство web.xml? Я столкнулся с DefaultNamingStrategy и ImprovedNamingStrategy, но не уверен, как указать тот или иной.

Ответ 1

Вот возможное обходное решение: если вы назовете его dateofbirth, то столбец в БД будет назван так, но имя атрибута должно быть одинаковым.

Hibernate берет формат футляр верблюда для создания/чтения столбцов базы данных.

У меня была эта проблема раньше. Я работал с устаревшими колонками, где не было места в именах столбцов "employeename", "employeerole", "departmentlocation". Я ненавижу это, потому что все мои свойства beans должны были быть без верблюжьего случая.

Столбцы базы данных, разделенные символом "_", будут использоваться для правильного отображения camelCase, как вы только что видели.

Ответ 2

FYI: причина для добавления подчеркиваний, вероятно, связана с тем, что вы используете ImprovedNamingStrategy. Он установлен на объект Configuration. См. здесь для примера...

Если вы не хотите подчеркивания, вы можете просто не устанавливать стратегию именования или устанавливать его в ранее найденную ранее DefaultNamingStrategy.

Ответ 3

Попробуйте поместить это в

application.properties

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Ответ 4

Поместите аннотацию @Column на получателе:

@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}

Ответ 5

У ImprovedNamingStrategy есть метод addUnderscores(), который вызывается из tableName() и columnName() вы можете реализовать свой собственный класс стратегий именования и переопределить их по вашему выбору.

    public class MyOwnNamingStrategy extends ImprovedNamingStrategy {
        @Override
        public String tableName(String tableName) {
        //return addUnderscores(columnName); // skip this
        return columnName; // if you want column name variable name same
        //return changeAsYouWant(columnName); // as name sames
       }
   }

Ответ 6

Обходным решением было использование @Column (name= "dateofbirth" ), который работал для моих целей.

Ответ 7

добавить свойство ниже в случае spring загрузки.

spring.jpa.hibernate.naming.implicit-стратегия = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-стратегия = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Ответ 8

Вы можете аннотировать любые поля или методы getter, это не имеет значения. Можете ли вы разместить полный файл hibernate.cfg.xml или persistence.xml?

Ответ 9

Я не уверен на 100%, но вам не нужно комментировать метод get, а не частную переменную?