我们将使用Spring和GORM和Gradle启动一个新项目。我已经能够为hibernate配置大多数属性,但是到目前为止我还没有找到正确的方法来设置命名策略。
尝试
我尝试在application.properties中设置各种属性并添加文件hibernate.properties.我们使用的是自动配置,我看到在HibernateGormAutoConfiguration.中发现并添加了道具
我还做了一些尝试,创建实体管理器和会话工厂bean,但没有成功。
示例来自application.properties (尝试所有排列):
spring.hibernate.hbm2ddl.auto=none # this works!!
# from now on none works
# I tried all permutations with combinations of
# *.hibernate[.ejb].* and *.naming_strategy/naming-strategy
spring.hibernate.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy
spring.hibernate.ejb.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy
spring.jpa.hibernate.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy
spring.properties.hibernate.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy
spring.jpa.properties.hibernate.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy
spring.gorm.hibernate.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy
spring.gorm.properties.hibernate.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy
gorm.hibernate.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy来自src/main/resources/hibernate.properties:的示例
hibernate.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy
hibernate.ejb.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy启动应用程序并尝试加载实体时的日志记录和堆栈跟踪:
2014-11-03 10:12:04.381 INFO 81729 --- [ main] org.hibernate.cfg.Environment : HHH000205: Loaded properties from ...
resource hibernate.properties: {hibernate.ejb.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy, hibernate.namingStrategy=org.hibernate.cfg.DefaultNamingStrategy, hibernate.bytecode.use_reflection_optimizer=false}
2014-11-03 10:09:28.825 WARN 81619 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 207, SQLState: 42S22
2014-11-03 10:09:28.825 ERROR 81619 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : Invalid column name 'origin_marking'.
2014-11-03 10:09:28.839 ERROR 81619 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[jerseyServlet] : Servlet.service() for servlet [jerseyServlet] in context with path [] threw exception [org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not extract ResultSet; bad SQL grammar [n/a]; nested exception is java.sql.SQLException: Invalid column name 'origin_marking'.] with root cause
java.sql.SQLException: Invalid column name 'origin_marking'.
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)代码示例
不幸的是,根据每个字段重写字段名并不是一个可行的解决方案:
static mapping = {
columns {
originMarking column: 'originMarking'
}
}构建文件的摘录如下所示:
.. // main build file
buildscript {
repositories {
jcenter()
maven { url "http://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.0.M2")
classpath 'org.springframework:springloaded:1.2.0.RELEASE'
}
}
..
apply plugin: 'spring-boot'
..
.. // domain build file
jar.baseName = 'domain'
dependencies {
compile "org.grails:gorm-hibernate4-spring-boot:1.1.0.RELEASE",
"joda-time:joda-time:2.5",
'org.jadira.usertype:usertype.jodatime:2.0.1',
"commons-dbcp:commons-dbcp:1.4",
"net.sourceforge.jtds:jtds:1.2.7"
runtime "com.h2database:h2"
}
..
.. // api build file
apply plugin: 'spring-boot'
jar.baseName = 'api'
dependencies {
compile project(':domain')
compile "org.springframework.boot:spring-boot-starter-jersey"
..
} 任何帮助都将不胜感激!!
这段代码与这里问到的问题相同:带有groovy/gradle的Spring引导泽西在启动时失败
发布于 2014-11-03 14:08:35
Grails确实使用了spring.hibernate.naming_strategy设置,但它的使用方式并不像您所期望的那样,而且它没有触及默认的命名策略。我不知道这是什么原因。您可能想通过提出问题与Grails团队讨论这个问题。
同时,可以通过在configureNamingStrategy上调用AbstractGrailsDomainBinder来编程地配置默认命名策略。例如:
@EnableAutoConfiguration
class Application {
static void main(String[] args) {
AbstractGrailsDomainBinder.configureNamingStrategy('DEFAULT', DefaultNamingStrategy)
SpringApplication.run Application, args
}
}https://stackoverflow.com/questions/26711323
复制相似问题