What i want to do
I'm trying to migrate from WildFly 8.2.0 to WildFly 10.0.0 which means that i have (and want) to migrate from Hibernate 4.3 to Hibernate 5.0.
Setup
Java 8u40 Spring 4.1.9 SQL Server 2012 Wildfly 8.2.0 -> Wildfly 10.0.0 Hibernate 4.3.6 -> Hibernate 5.0.7 I have read the migration guide and i'm hit by the Naming Strategy changes. I have read many questions about this on SO, but mine seems a bit different. Hibernate complains that tables are not found:
INFO [o.h.Version] HHH000412: Hibernate Core {5.0.7.Final} INFO [o.h.cfg.Environment] HHH000206: hibernate.properties not found INFO [o.h.cfg.Environment] HHH000021: Bytecode provider name : javassist INFO [o.h.annotations.common.Version] HCANN000001: Hibernate Commons Annotations {5.0.1.Final} INFO [o.h.dialect.Dialect] HHH000400: Using dialect: org.hibernate.dialect.SQLServerDialect INFO [o.h.envers.boot.internal.EnversServiceImpl] Envers integration enabled? : true INFO [o.h.validator.internal.util.Version] HV000001: Hibernate Validator 5.2.3.Final INFO [o.h.tool.hbm2ddl.SchemaValidator] HHH000229: Running schema validator INFO [o.h.t.s.e.i.InformationExtractorJdbcDatabaseMetaDataImpl] HHH000262: Table not found: SEC_AUTHORIZATION_RULES INFO [o.h.t.s.e.i.InformationExtractorJdbcDatabaseMetaDataImpl] HHH000262: Table not found: SEC_USER More tables not found ... INFO [o.h.hql.internal.QueryTranslatorFactoryInitiator] (ServerService Thread Pool -- 62) HHH000397: Using ASTQueryTranslatorFactory When i switched to DEBUG logging i saw for example that he is binding the entity to the correct DB table:
DEBUG [o.h.c.a.EntityBinder] Bind entity com.company.user.User on table SEC_USER DEBUG [o.h.c.Ejb3Column] Binding column: Ejb3Column{table=org.hibernate.mapping.Table(SEC_USER), mappingColumn=ID, insertable=true, updatable=true, unique=false} What is odd to me is that the app works. After this Table not founds it does not complain that schema is not right. The app works. Selecting, inserting, updating data works.
I have hibernate configured through it's spring-orm abstraction:
@Bean(name = "myEmf") @DependsOn({"dataSource", "flyway"}) public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() { LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource()); em.setPackagesToScan(new String[]{"com.company.**.*"}); em.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); em.setJpaProperties(additionalProperties()); return em; } private Properties additionalProperties() { Properties propFile = propertiesFile(); properties.setProperty("hibernate.hbm2ddl.auto", "validate"); properties.setProperty("hibernate.dialect", "org.hibernate.dialect.SQLServer2012Dialect"); properties.setProperty("hibernate.show_sql", "false"); properties.setProperty("hibernate.format_sql", "true"); properties.setProperty("hibernate.id.new_generator_mappings", "false"); properties.setProperty("hibernate.use_sql_comments", "false"); properties.setProperty("hibernate.implicit_naming_strategy", "legacy-jpa"); return properties; } In this correspoding entity i have table names and column names named explicitly:
@Entity @Table(name = "SEC_USER") public class User extends BaseEntity { @Column(name = "LOGIN", nullable = false, unique = true) private String login; Questions
- How to make this table not found log messages disappear?
- Why they are appearing if i have table names explicitly named?
- Why is he not complainging about column names?
- Why is he seemingly working correct?
What i have tried
- Upgrading Spring 4.1.9 to 4.2.5 which says he has support for Hibernate 5
- Set hibernate.implicit_naming_strategy to legacy-jpa according to this
Set manually the default schema and assigned the role db_owner. Note i never had to do this before with hibernate 4.
I have debugged hibernate a bit and what i found in the InformationExtractorJdbcDatabaseMetaDataImpl.java that hibernate does not see the catalog (whatever this is) and schema. At leat i think he should see the schema. See screenshot below: catalog and schema are null.


