Quello che voglio fare
sto cercando di migrare da wildfly 8.2.0 a wildfly 10.0.0 il che significa che ho (e voglio) migrare da Hibernate 4.3 a Hibernate 5.0.Hibernate 4 -> 5 migrazione: modifiche NamingStrategy, Tavoli non trovato
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
Ho letto l'migration guide e io sono colpito dalla Naming strategia modifiche. I havereadmanyquestions su questo su SO, ma il mio sembra un po 'diverso. Hibernate si lamenta che le tabelle non si trovano:
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
quando sono passato a registrazione di debug ho visto per esempio che egli è vincolante l'entità alla corretta tabella di DB:
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}
Qual è strano per me è che l'app funzioni. Dopo questo Table not found
s non si lamenta che lo schema non sia corretto. L'app funziona. Selezionare, inserire, aggiornare i dati funziona.
ho Hibernate configurato attraverso la sua primavera-orm astrazione:
@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 questa entità correspoding ho i nomi delle tabelle e delle colonne di nome in modo esplicito:
@Entity
@Table(name = "SEC_USER")
public class User extends BaseEntity {
@Column(name = "LOGIN", nullable = false, unique = true)
private String login;
Domande
- Come rendere questa tabella non trovata I messaggi di log scompaiono?
- Perché vengono visualizzati se i nomi delle tabelle sono esplicitamente denominati?
- Perché non si lamenta dei nomi delle colonne?
- Perché è apparentemente funzionante corretto?
quello che ho cercato
- Aggiornamento primavera 4.1.9 a 4.2.5 che says he has support for Hibernate 5
- Impostare hibernate.implicit_naming_strategy a legacy-APP secondo le this
Set manualmente lo schema predefinito e assegnato il ruolo db_owner. Nota non ho mai avuto a che fare prima con Hibernate 4.
ho debug hibernate un po 'e quello che ho trovato nel InformationExtractorJdbcDatabaseMetaDataImpl.java che vanno in letargo non vede il catalogo (qualunque cosa questo è) e schema. A pensarci penso che dovrebbe vedere lo schema. Vedi screenshot qui sotto: il catalogo e lo schema sono nulli.
Hmm. Non ha davvero senso. Sei sicuro di non aver provato più cose allo stesso tempo? La versione del driver SQL non dovrebbe avere nulla a che fare con questo. –
Sì, davvero. Ho ripristinato tutte le mie modifiche relative allo schema e lasciato solo il set 'hibernate.implicit_naming_strategy' e poi ho cambiato il driver JDBC avanti e indietro e basta. Forse http://stackoverflow.com/users/1025118/vlad-mihalcea vedrà questo thread e commenterà :) –