Ich habe eine einfache Spring-Jpa-Konfiguration, in der ich Hibernate ImprovedNamingStrategy
konfiguriert habe. Das heißt, wenn meine Entitätsklasse eine Variable userName
hat, sollte Hibernate sie in user_name
für die Abfrage der Datenbank konvertieren. Aber diese Namensumwandlung aufgehört zu arbeiten, nachdem ich ein Upgrade 5. Hibernate Ich erhalte die Fehlermeldung:ImprovedNamingStrategy funktioniert nicht mehr in Hibernate 5
ERROR: Unknown column 'user0_.userName' in 'field list'
Dies ist meine Ruhe config:
@Configuration
@EnableJpaRepositories("com.springJpa.repository")
@EnableTransactionManagement
public class DataConfig {
@Bean
public DataSource dataSource(){
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/test");
ds.setUsername("root");
ds.setPassword("admin");
return ds;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setShowSql(Boolean.TRUE);
vendorAdapter.setDatabase(Database.MYSQL);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setDataSource(dataSource());
factory.setPackagesToScan("com.springJpa.entity");
Properties jpaProperties = new Properties();
jpaProperties.put("hibernate.ejb.naming_strategy","org.hibernate.cfg.ImprovedNamingStrategy");
jpaProperties.put("hibernate.dialect","org.hibernate.dialect.MySQL5InnoDBDialect");
factory.setJpaProperties(jpaProperties);
factory.afterPropertiesSet();
return factory;
}
@Bean
public SharedEntityManagerBean entityManager() {
SharedEntityManagerBean entityManager = new SharedEntityManagerBean();
entityManager.setEntityManagerFactory(entityManagerFactory().getObject());
return entityManager;
}
@Bean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory().getObject());
return txManager;
}
@Bean
public ImprovedNamingStrategy namingStrategy(){
return new ImprovedNamingStrategy();
}
}
Das ist mein Entity-Klasse:
@Getter
@Setter
@Entity
@Table(name="user")
public class User{
@Id
@GeneratedValue
private Long id;
private String userName;
private String email;
private String password;
private String role;
}
Ich möchte meine Datenbankfelder nicht ausdrücklich innerhalb der @ Column Annotationen benennen. Ich möchte meine Konfiguration, die Camel Case implizit in Unterstriche konvertieren kann.
Bitte führen.
Ich verstehe nicht, warum Sie @Tyler nicht @Column –
verwenden möchten, es ist nur für die Codierung einfache Hinzufügen „@Column“ für jede Variable nur ärgerlich ist, konfigurieren kann ich stattdessen Naming- Strategie, die den Namen der Variable zu db Spaltennamen zuordnen und ich kann vermeiden, so viele Spalte Annotation – Anup