Проблемы с именем столбца в спящем режиме
@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, а не частную переменную?