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
答案 0 :(得分:4)
您有一个schema.sql
和data.sql
,它们都是在DataSource
配置完成后执行的。接下来创建EntityManagerFactory
,默认情况下(参见https://github.com/danielsz/android-oauth2-client)这将create-drop
嵌入式类型的数据库(如H2)。
您可以通过将spring.jpa.hibernate.ddl-auto
属性更改为create
或create-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'”)