JpaRepository findAll()返回空结果

时间:2017-03-31 08:23:03

标签: java spring spring-data-jpa h2

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`));

我的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');

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;
  }

}

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();
}

这是我的Contoller

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

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

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

3 个答案:

答案 0 :(得分:4)

您有一个schema.sqldata.sql,它们都是在DataSource配置完成后执行的。接下来创建EntityManagerFactory,默认情况下(参见https://github.com/danielsz/android-oauth2-client)这将create-drop嵌入式类型的数据库(如H2)。

您可以通过将spring.jpa.hibernate.ddl-auto属性更改为createcreate-drop之外的任何其他内容来覆盖此行为。

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

如果这是出于学习目的,你应该没问题,如果你想在现场制作系统中使用它,我建议不要使用它来使用类似the reference guide的东西来管理你的架构。

答案 1 :(得分:0)

据我所知,你想在应用程序启动时执行sql脚本,之后使用Hibernate?好吧,你必须使用here中提到的一个选项,并设置spring.jpa.hibernate.ddl-auto=none。这里给出了解释。

祝你好运

答案 2 :(得分:0)

在我的情况下,我已删除列为null,并且在JPA实体上具有@Where(clause =“ deleted ='false'”)