JpaRepository findAll()返回空结果

fis*_*kra 4 java spring h2 spring-data-jpa

JpaRepository findAll()方法返回空结果。我正在尝试通过使用Spring-boot,h2数据库和jpa来实现rest服务。

这是我的 schema.sql

CREATE TABLE IF NOT EXISTS `City` (
  `city_id` bigint(20) NOT NULL auto_increment,
  `city_name` varchar(200) NOT NULL,
PRIMARY KEY (`city_id`));
Run Code Online (Sandbox Code Playgroud)

我的data.sql文件包括:

INSERT INTO City (city_id,city_name) VALUES(1,'EDE');
INSERT INTO City (city_id,city_name) VALUES(2,'DRUTEN');
INSERT INTO City (city_id,city_name) VALUES(3,'DELFT');
Run Code Online (Sandbox Code Playgroud)

City实体:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "City")
public class City {

  @Id
  @GeneratedValue
  @Column(name = "city_id")
  private Long cityId;

  @Column(name = "city_name")
  private String cityName;

  public Long getCityId() {
    return cityId;
  }

  public void setCityId(Long cityId) {
    this.cityId = cityId;
  }

  public String getCityName() {
    return cityName;
  }

  public void setCityName(String cityName) {
    this.cityName = cityName;
  }

}
Run Code Online (Sandbox Code Playgroud)

JpaRepository接口:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface CityRepository extends JpaRepository<City, Long> {

    @Override
    List<City> findAll();
}
Run Code Online (Sandbox Code Playgroud)

这是我的Contoller

@RestController
@RequestMapping("/city")
public class CityController {
    @Autowired
    private CityRepository cityRepository;

    @RequestMapping(method = RequestMethod.GET, value = "/all")
    public List<City> getAllCityList(){
        return cityRepository.findAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?参考文档:Spring doc

M. *_*num 5

您有一个schema.sqldata.sql,它们DataSource都已在配置好并准备好后执行。接下来EntityManagerFactory创建,默认情况下(请参阅参考指南),这将为create-drop嵌入式类型(如H2)提供数据库。

您可以通过将该spring.jpa.hibernate.ddl-auto属性更改为create或之后的其他任何行为来覆盖此行为create-drop

另一个解决方案是将您的名称重命名data.sqlimport.sqlHibernate为您创建架构后将执行的名称。现在,您显然也可以删除,schema.sql因为Hibernate将创建架构。

如果这是出于学习目的,那么应该没问题,如果您想在实时生产系统中使用它,我建议不要使用它来使用Flyway之类的东西来管理您的模式。