我想要做的
我试图从迁移8.2.0 WildFly到WildFly 10.0.0这意味着我有(和希望)什么从Hibernate 4.3迁移到Hibernate 5.0。休眠4 - > 5迁移:NamingStrategy变化,表中未发现
设置
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
我已阅读migration guide和我被打命名策略变化。我havemanyquestions关于这个SO,但我的看起来有点不同。 Hibernate的抱怨表找不到:
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
当我切换到调试日志记录我看到的例子,他是实体结合到正确的数据库表:
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}
什么是奇怪我是该应用程序的作品。在此Table not found
之后,它并不抱怨模式不正确。该应用程序工作。选择,插入,更新数据的作品。
我已经休眠通过它配置的spring-ORM抽象:
@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;
}
在这种correspoding实体我已经表名和列名明确命名:
@Entity
@Table(name = "SEC_USER")
public class User extends BaseEntity {
@Column(name = "LOGIN", nullable = false, unique = true)
private String login;
问题
- 如何使这张表找不到日志消息?
- 为什么他们出现,如果我有表名显式命名?
- 他为什么不抱怨列名?
- 他为什么看似正常工作?
我曾尝试
- 升级4.1.9春季4.2.5到其says he has support for Hibernate 5
- 设置hibernate.implicit_naming_strategy根据this
我已经调试冬眠了一下,我在冬眠不看目录(无论这是)和架构的InformationExtractorJdbcDatabaseMetaDataImpl.java发现之前做到这一点。在我看来,他应该看到架构。请参阅下面的截图:目录和模式为空。
嗯。这真的没有意义。你确定你没有在同一时间尝试多件事吗? SQL驱动程序版本与此无关。 –
是的,真的。我恢复了关于模式的所有更改,只留下了'hibernate.implicit_naming_strategy'集,然后来回切换JDBC驱动程序,就是这样。也许http://stackoverflow.com/users/1025118/vlad-mihalcea会看到这个线程和评论:) –