我找到了原因。我知道一个解决方案。
但我不能接受不知道它是怎么发生的:
我的 POJO 仅由类名定义(没有 Table="" 元数据修饰)
在我的本地机器上运行良好。
SQL查询为:"... 'Dbname'.'tablename' ... "
在 RDS Mysql 上的 AWS 上 Dockerized。
SQL查询为:"... 'Dbname'.'TableName' ... "
然后当然查询失败了。
我的配置:
属性:
#Hibernate (Spring-JPA)
hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.use_sql_comments=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
POM:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud-services.version>1.5.0.RELEASE</spring-cloud-services.version>
<spring-cloud.version>Dalston.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>io.pivotal.spring.cloud</groupId>
<artifactId>spring-cloud-services-starter-service-registry</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.pivotal.spring.cloud</groupId>
<artifactId>spring-cloud-services-dependencies</artifactId>
<version>${spring-cloud-services.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
显然我的 NamingStrategy 设置将在本地或 aws 中被忽略或覆盖。
但此时我可能需要一些帮助。
PS:为什么我找不到任何关于 Hibernate 命名策略设置的有用文档?!?例如:strat-setting-A => TableName -> TABLE_NAME 等...
为什么我必须阅读代码才能理解这一点? (TT)
编辑:
万岁!我有原因。
我的本地数据库配置不同。好吧,默认情况下:lower_case_table_names=1
所以它只是忽略了 CamelCase。但在 aws 上,它似乎设置为 0 这意味着它会处理骆驼案例名称。
所以灵魂很简单:将我的命名策略设置为仅小写!
我在哪里可以找到配置正确的文档? :-)
无论如何……最好没有文档,然后是错误的文档!
解决方案:
2 个选项:
1 - 使用 @Table() 装饰器手动配置 POJO。
2 - 从属性中删除休眠命名设置(或将其更改为任何需要的内容)
PS:如果有人知道一个好的文档,我仍然对所有设置可能性感兴趣。