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
schema.sql
とdata.sql
があり、どちらもDataSource
が構成され、準備ができた後に実行されます。次に、EntityManagerFactory
が作成され、デフォルトで( リファレンスガイド を参照)、これは組み込み型(H2など)のデータベースをcreate-drop
します。
spring.jpa.hibernate.ddl-auto
プロパティをcreate
またはcreate-drop
以外の値に変更することで、この動作をオーバーライドできます。
もう1つの解決策は、data.sql
の名前をimport.sql
に変更することです。これは、Hibernateがスキーマを作成した後に実行されます。 Hibernateがスキーマを作成するため、明らかにschema.sql
を削除することもできます。
これが学習目的である場合は問題ありません。ライブプロダクションシステムでこれを使用する場合は、これを使用する代わりに Flyway のようなものを使用してスキーマを管理することをお勧めします。
私が理解している限り、アプリケーションの起動時にSQLスクリプトを実行し、その後Hibernateを使用しますか?さて、あなたは言及されたオプションの1つを使用する必要があります ここ そしてspring.jpa.hibernate.ddl-auto=none
を設定します。説明はそこに与えられます。
幸運を
私の場合、削除された列はnullであり、JPAエンティティに@Where(clause = "deleted = 'false'")がありました。