在AWS上 - 无法提取ResultSet; SQL [不适用];嵌套异常是org.hibernate.exception.SQLGrammarException:无法提取ResultSet aws

时间:2017-08-26 18:58:35

标签: mysql hibernate amazon-web-services spring-boot amazon-rds

我的数据库访问存在这个(常见)问题。但就我而言,我找不到合适的回答......

创建了一个非常基本的MySql DB和Spring Boot App来访问它。

在我的本地主机上,它运行顺畅。

然后我转储了本地数据库。将其插入AWS-MySql DB。 并将带有Docker的Spring-Boot应用程序部署到我的EC2。 一切都很好。

但是在使用AWS MySQL时,所有REST端点都会返回: 状态500 无法提取ResultSet; SQL [不适用];嵌套异常是org.hibernate.exception.SQLGrammarException:无法提取ResultSet

对我来说,它看起来和localhost一样。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我找到了原因。我知道一个解决方案。 但我不能接受不知道它是如何发生的:

我的POJO仅由Classname定义(无Table =“”Metadata decortion)

在我的本地机器上运行良好。 SQL查询是:"... 'Dbname'.'tablename' ... "

在RDS Mysql上在AWS上进行Docker化。
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 =&gt; TableName - &gt; TABLE_NAME等...... 为什么我必须阅读代码才能理解这一点? (T.T)

编辑: 万岁!我有原因。 我的本地数据库配置不同。好吧,默认情况下:lower_case_table_names=1 所以它只是忽略了CamelCase。但是在aws上似乎设置为0这意味着它会处理骆驼案例名称。

所以灵魂很容易:只将我的命名策略设置为小写! 我在哪里可以找到配置正确的文档? : - )

好吧反正...更好的没有文档然后错误的文档!

解决方案:

2个选项:

1 - 使用@Table()装饰器手动配置POJO。 2 - 从属性中删除休眠命名设置(或将其更改为所需的)

PS:如果有人认识一位优秀的医生,我仍然会注意到所有的设置可能性。