Rob*_*roj 8 java spring hibernate wildfly hibernate-5.x
我正在尝试从WildFly 8.2.0迁移到WildFly 10.0.0,这意味着我已经(并希望)从Hibernate 4.3迁移到Hibernate 5.0.
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
Run Code Online (Sandbox Code Playgroud)
我已经阅读了迁移指南,并且我遇到了命名策略的变化.我在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
Run Code Online (Sandbox Code Playgroud)
当我切换到DEBUG日志时,我看到他将实体绑定到正确的数据库表:
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}
Run Code Online (Sandbox Code Playgroud)
对我来说奇怪的是应用程序有效.在此之后,Table not found
它不会抱怨架构不正确.该应用程序工作.选择,插入,更新数据有效.
我通过它的spring-orm抽象配置了hibernate:
@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;
}
Run Code Online (Sandbox Code Playgroud)
在这个correspoding实体中,我有明确命名的表名和列名:
@Entity
@Table(name = "SEC_USER")
public class User extends BaseEntity {
@Column(name = "LOGIN", nullable = false, unique = true)
private String login;
Run Code Online (Sandbox Code Playgroud)
我已经调试了一些hibernate和我在InformationExtractorJdbcDatabaseMetaDataImpl.java中发现的,hibernate没有看到目录(不管这是什么)和架构.在leat,我认为他应该看到架构.请参见下面的屏幕截图:目录和架构为空.
我正在弄清楚同样的问题,但是有了jtds
司机.经过一番研究,我创建了一个hibernate,SqlServerDialect
使用sp_tables
存储过程来查找表声明.在那个SP第二个参数是模式名称,所以,如果它是null
表搜索正常工作,如果它是空字符串 - 不是.
Hibernate null
在两种情况下将此参数设置为:
getNameQualifierSupport()
返回NameQualifierSupport.CATALOG
,但所有SqlServerDialects都返回null
false
在'supportsSchemasInTableDefinitions()'方法中重新编译,但jtds
返回true
.为了解决这个问题,我决定扩展SqlServer2012Dialect
结束覆盖getNameQualifierSupport()
方法.
public class SqlServer2012DialectWithCatalogOnly extends SQLServer2012Dialect {
@Override
public NameQualifierSupport getNameQualifierSupport() {
return NameQualifierSupport.CATALOG;
}
}
Run Code Online (Sandbox Code Playgroud)
并将属性设置hibernate.dialect
为新类org.company.SqlServer2012DialectWithCatalogOnly
希望这可以帮助...
使用最新的 SQL Server JDBC 驱动程序解决了这个问题。A 有一个 2012 年的旧版本。现在我从https://www.microsoft.com/en-us/download/details.aspx?id=11774下载并使用了最新的 JDBC 4.2 (sqljdbc_4.2.6420.100_enu.exe - > sqljdbc42.jar) 然后它开始工作。我什至可以恢复 SQL 用户的默认架构更改。
归档时间: |
|
查看次数: |
5782 次 |
最近记录: |