无法提取与String相关的ResultSet为

时间:2019-02-15 13:03:19

标签: java spring hibernate spring-boot jpa

春季错误消息:

version: 0.0
environment_variables:
    plaintext:
        "INPUT_FILE": "serverless.yml"
        "S3_BUCKET": ""
containers:
    LambdaFunctions:
        phases:
            during_build:
                commands:
                    - npm install
                    - aws cloudformation package --template $INPUT_FILE --s3-bucket $S3_BUCKET --output-template post-saml.yaml
        artifacts:
            files:
                - post-saml.yaml
                - beta.json

使用Spring Boot和Hibernate无法精确设置结果。

: GenerationTarget encountered exception accepting command : Error executing DDL "create table category_class (category_name varchar(255) not null, primary key (category_name)) engine=MyISAM" via JDBC Statement



: GenerationTarget encountered exception accepting command : Error executing DDL "alter table book_class add constraint FKqov24n7bmx5f0s8d74tdxbgbk foreign key (book_category) references category_class (category_name)" via JDBC Statement

我所有其他表都正确显示,但是我的类别类确实有一个字符串作为PK,这可能是问题的原因。 当我尝试通过我的categoryService和CategoryRepository扩展JPARepository来使用findAll访问mysql数据库时,会发生错误。

-Category.java-

 Caused by: java.sql.SQLSyntaxErrorException: Table 'myDatabase.category_class' doesn't exist

-application.properties-

package myPackage;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.List;

@Data
@NoArgsConstructor
@Entity
@Table(name="category_class")
public class Category {
        @Id
        @Column(name = "categoryName")
        private String name;

        @OneToMany(mappedBy = "category")
        private List<Book> books;
}

有人知道为什么没有在MySQL中创建我的表吗?

编辑:添加了图书类&&清理。

--- Book.java ---

spring.datasource.url= jdbc:mysql://localhost:3306/oblig2_v3
spring.datasource.username=
spring.datasource.password =
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
spring.jpa.generate-ddl=true
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
server.port=8080

2 个答案:

答案 0 :(得分:1)

您需要使用属性

spring.jpa.hibernate.ddl-auto=create-drop  or update

您遇到的问题是您已经创建了数据库,并且没有尝试对其进行更新。

您有两个选择:

  1. 使用更新,这将使spring浏览架构的元数据并尝试应用必要的更改。
  2. 每次都删除并重新创建模式-在开发阶段或单元/集成测试方案中可能需要这样做。

根据spring文档,此属性的以下值有效:

  

您可以显式设置spring.jpa.hibernate.ddl-auto和标准   休眠属性值是none,validate,update,create和   创建放置。 Spring Boot根据以下内容为您选择一个默认值   是否认为您的数据库是嵌入式的。默认为   如果未检测到模式管理器或全部未检测到模式管理器,则创建   其他情况。通过查看   连接类型。嵌入了hsqldb,h2和derby,其他是   不。从内存数据库切换到“真实”数据库时要小心   您不对表的存在做出假设,并且   新平台中的数据。您要么必须显式设置ddl-auto   或使用其他机制之一来初始化数据库。

答案 1 :(得分:0)

这与@Arnaud所说的VARCHARPK有关。由于我不想更改我的PK,因此我点击了提供的链接:#1071 - Specified key was too long; max key length is 1000 bytes

然后从其中一个答案中快速修复了问题,并使用以下命令在mysql中创建了数据库:

create database my_db character set utf8 collate utf8_bin; 解决了我的问题。

所提供的链接应该对其他遇到类似问题的人有所帮助。感谢您的帮助。