Стратегия именования Hibernate изменение имен таблиц
Я немного смущен стратегией именования hibernates (версия 5.1), а именно, она изменяет имя моей таблицы, и я хотел бы избежать этого. Также - spring.jpa.hibernate.naming_strategy
кажется устаревшим в соответствии с intelij, но я не могу найти (nother) способ его правильной настройки.
у меня есть следующие настройки в приложении.свойства:
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.jpa.properties.hibernate.current_session_context_class=thread
первый помечен как depracted, как сказал.
теперь у меня есть сущности:
@Entity
@Table(name = "usaUploadTable", schema = "usertable201", catalog = "")
public class UsaUploadTable {
....
}
таблица зовут, как в @Table(name = "")
usaUploadTable.
теперь, когда я запускаю свое приложение, я получаю
стол '.usa_upload_table ' не существует
что правильно - он не назван так, как hibernate меняет его.
что я могу сделать, чтобы hibernate правильно использовал мое имя таблицы?
Edit:
Я также пробовал
DefaultNamingStrategy
ImprovedNamingStrategy
все они меняются это
варианты:
spring-boot-1.4.0.RELEASE
hibernate 5.1
javax-transaction-api 1.2
hibernate-validator 5.2.4
javassist 3.20
4 ответов
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
это сработало для меня. вот версии, которые я использую:
Spring Boot (v1.4.2.RELEASE)
Hibernate Core {5.0.11.Final}
проблема заключается в spring-boot-1.4-похоже, они изменили свойства (или что-то еще), теперь я нашел этот ответ ImprovedNamingStrategy больше не работает в спящем режиме 5, но это все равно не правильно. Поэтому я немного изменил код, чтобы не использовать метод подчеркивания и расширить недавно введенный класс SpringPhysicalNamingStrategy
:
package com.foo;
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
import java.io.Serializable;
import java.util.Locale;
public class RealNamingStrategyImpl extends org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy implements Serializable {
public static final PhysicalNamingStrategyImpl INSTANCE = new PhysicalNamingStrategyImpl();
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
return new Identifier(name.getText(), name.isQuoted());
}
@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
return new Identifier(name.getText(), name.isQuoted());
}
}
и application.properties
Я изменил устаревшую строку на
spring.jpa.properties.hibernate.physical_naming_strategy=<package>.RealNamingStrategyImpl
теперь он использует именно имена таблиц и столбцов, как они есть в моих файлах сущностей.
для тех, кто хочет верхний регистр в Postgresql и Spring boot 1.5.2
public class CustomDatabaseIdentifierNamingStrategy extends org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy implements Serializable {
public static final long serialVersionUID = 1L;
public static final CustomDatabaseIdentifierNamingStrategy INSTANCE = new CustomDatabaseIdentifierNamingStrategy();
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
return new Identifier(name.getText().toUpperCase(), true);
}
@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
return new Identifier(name.getText().toUpperCase(), true);
}
}
Весенняя загрузка 2.0.0 & Hibernate 5
public class MySqlNamingStrategyImpl extends org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy implements Serializable {
protected boolean isCaseInsensitive(JdbcEnvironment jdbcEnvironment) {
return false;
}
}