java JpaRepository findAll() 返回空结果
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/43135913/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
JpaRepository findAll() returns empty result
提问by fiskra
JpaRepository
findAll()
method returns empty result. I am trying to implement rest service by using Spring-boot, h2 database and jpa.
JpaRepository
findAll()
方法返回空结果。我正在尝试使用 Spring-boot、h2 数据库和 jpa 来实现休息服务。
Here is my schema.sql
这是我的 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`));
My data.sql
file includes :
我的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');
The City
entity :
该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;
}
}
The JpaRepository
interface:
该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();
}
And here is my Contoller
class
这是我的Contoller
班级
@RestController
@RequestMapping("/city")
public class CityController {
@Autowired
private CityRepository cityRepository;
@RequestMapping(method = RequestMethod.GET, value = "/all")
public List<City> getAllCityList(){
return cityRepository.findAll();
}
}
What am I doing wrong here? The reference documentation : Spring doc
我在这里做错了什么?参考文档:Spring doc
回答by M. Deinum
You have a schema.sql
and data.sql
which are both executed after the DataSource
has been configured and is ready. Next the EntityManagerFactory
is created and by default (See the reference guide) this will create-drop
the database for embedded types (like H2).
您有一个schema.sql
和data.sql
,它们都在DataSource
配置完成并准备就绪后执行。接下来EntityManagerFactory
创建,默认情况下(参见参考指南)这将create-drop
是嵌入类型(如 H2)的数据库。
You can override this behavior by changing the spring.jpa.hibernate.ddl-auto
property to anything else then create
or create-drop
.
您可以通过将spring.jpa.hibernate.ddl-auto
属性更改为其他任何内容 thencreate
或来覆盖此行为create-drop
。
Another solution is to rename your data.sql
to import.sql
which will be executed after Hibernate created the schema for you. You can now obviously also remove the schema.sql
as Hibernate will create the schema.
另一种解决方案是将您的重命名data.sql
为import.sql
将在 Hibernate 为您创建架构后执行的。您现在显然也可以删除schema.sql
Hibernate 将创建模式。
If this is for learning purposes you should be fine, if you want to use this in a live production system I suggest instead of using this to use something like Flywayto manage your schema.
如果这是出于学习目的,您应该没问题,如果您想在实时生产系统中使用它,我建议您不要使用它来使用Flyway 之类的东西来管理您的架构。
回答by Reborn
As far as i understood, you want to execute sql scripts on application startup and after that use Hibernate? Well, you have to use one of the options mentioned here, and set spring.jpa.hibernate.ddl-auto=none
.The explanation is given there.
据我了解,您想在应用程序启动时执行 sql 脚本,然后再使用 Hibernate?好吧,你必须使用这里提到的选项之一,并设置spring.jpa.hibernate.ddl-auto=none
。解释在那里给出。
Good luck
祝你好运
回答by Samuel Gwokuda
In my case I had the deleted column as null and had @Where(clause = "deleted='false'") on the JPA Entity
在我的情况下,我将删除的列设置为空,并在 JPA 实体上设置了 @Where(clause = "deleted='false'")