6 votes

JpaRepository findAll() renvoie un résultat vide

JpaRepository findAll() renvoie un résultat vide. J'essaie de mettre en place un service de repos en utilisant Spring-boot, la base de données h2 et jpa.

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

Mi data.sql le dossier comprend :

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

En City entité :

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

}

En JpaRepository l'interface :

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

    @Override
    List<City> findAll();
}

Et voici mon Contoller classe

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

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

Qu'est-ce qui ne va pas ? La documentation de référence : Doc de printemps

7voto

M. Deinum Points 34051

Vous avez un schema.sql y data.sql qui sont tous deux exécutés après le DataSource a été configuré et est prêt. Ensuite, le EntityManagerFactory est créé et par défaut (voir le guide de référence ), ce qui create-drop la base de données pour les types intégrés (comme H2).

Vous pouvez modifier ce comportement en changeant le paramètre spring.jpa.hibernate.ddl-auto à une autre propriété, alors create o create-drop .

Une autre solution consiste à renommer votre data.sql a import.sql qui sera exécutée après qu'Hibernate ait créé le schéma pour vous. Vous pouvez évidemment supprimer l'option schema.sql car Hibernate créera le schéma.

Si vous voulez l'utiliser dans un système de production en direct, je vous suggère d'utiliser quelque chose comme Voie aérienne pour gérer votre schéma.

3voto

Reborn Points 934

Si j'ai bien compris, vous voulez exécuter des scripts sql scripts au démarrage de l'application et ensuite utiliser Hibernate ? Eh bien, vous devez utiliser l'une des options mentionnées. ici et fixer spring.jpa.hibernate.ddl-auto=none L'explication est donnée ici.

Bonne chance

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X