【问题标题】:Can't create table with jpa+spring boot无法使用 jpa+spring boot 创建表
【发布时间】:2018-05-22 18:31:16
【问题描述】:

我正在尝试使用 JPA 生成表。但我无法创建它。代码没有错误,但是好像有配置错误。但我找不到它,我尝试了很多配置,但没有任何反应。 非常感谢。

这是application.property:

spring.datasource.url=jdbc:mysql://localhost:3306/springapp
spring.datasource.username= root
spring.datasource.password= me
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=create

这是我的课:

@Entity
public class Customer {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    private String name;
    private String phone;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public Customer(String name, String phone) {
        super();
        this.name = name;
        this.phone = phone;
    }
    public Customer() {
        super();
    }
}

这是应用程序:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

这是控制器:

@RestController @RequestMapping("/客户") 公共类客户控制器 { @自动连线 CustomerRepository customerRepository;

@RequestMapping("/findall")
@ResponseBody
public List<Customer> findAll() {
    return customerRepository.findAll();
}

}

Pom.xml

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>GStock-3</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>GStock-3</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.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>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

【问题讨论】:

  • 它似乎是正确的..你得到什么错误?表是在mysql中创建的吗?
  • 当我检查数据库时,我找不到表castomer
  • 嗨,你有 github 的示例代码

标签: java hibernate spring-boot spring-data-jpa


【解决方案1】:

根据目前的信息,我有一些建议/问题可能会对您有所帮助:

  • “springapp”数据库​​是否存在并在 MySQL 中分配了正确的用户 (root) 和密码 (me)
  • MySQL 启动了吗?
  • 我在您的代码中没有看到 @Repository 定义,例如

    @Repository 公共接口 CustomerRepository 扩展 JpaRepository{}

【讨论】:

  • 是的,我有接口扩展 jpaRepository。 springapp 以相同的用户名和密码存在。我做了:使用springapp;显示表:空集
  • 同样的事情,真的很糟糕,!
  • 注意:我使用的是普通的 spring,使用相同的用户名和密码,并且我使用了 jpa 和我正常生成的表。但是现在,我转向spring boot它不起作用,我认为这是配置问题。
【解决方案2】:

在你的 mysql 上执行以下操作:

mysql> 创建数据库 db_example; -- 创建新数据库

mysql> 创建由“ThePassword”标识的用户“springuser”@“localhost”; -- 创建用户

mysql> 将 db_example.* 上的所有内容授予 'springuser'@'localhost'; -- 在新创建的数据库上将所有权限授予新用户

并添加到application.xml:

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=ThePassword

或

您可以通过this link

【讨论】:

    【解决方案3】:

    尝试添加@EntityScan

    @EntityScan("<package with entities>")
    @SpringBootApplication 
    public class Application { ... }
    

    【讨论】:

    • customer.java 在哪里?
    • 没有。近@SpringBootApplication 公共类Application
    • 是的,它终于可以工作了,我在 application.java 中添加了@EntityScan("")。谢谢 nikolay 和所有其他人的帮助。
    • 感谢@NikolaiShevchenko,但有或没有@EntityScan,我收到错误“com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL 错误:SQLCODE=-551,SQLSTATE=42501 , SQLERRMC=MY_USER;CREATE TABLE;DSNDB04, DRIVER=4.29.24" 我使用 Spring Data JPA,数据源是 DB2 数据库。知道为什么我会收到此错误吗?似乎用户 MY_USER 没有权限发出 CREATE TABLE 命令;但是,我不知道 Hibernate / JPA 需要什么特权。
    • @pixel 用户代表其运行 SQL 命令可能需要一些权限,但 JPA(包括 Hibernate 引擎)本身不需要任何权限。
    猜你喜欢
    • 2018-05-11
    • 2018-01-17
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多