Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

944
Vistas
JpaRepository findAll () devuelve un resultado vacío

El método JpaRepository findAll() devuelve un resultado vacío. Estoy tratando de implementar el servicio de descanso usando Spring-boot, la base de datos h2 y jpa.

Aquí está mi 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 archivo data.sql incluye:

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

La entidad de la 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; } }

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

Y aquí está mi clase de Contoller

 @RestController @RequestMapping("/city") public class CityController { @Autowired private CityRepository cityRepository; @RequestMapping(method = RequestMethod.GET, value = "/all") public List<City> getAllCityList(){ return cityRepository.findAll(); } }

¿Qué estoy haciendo mal aquí? La documentación de referencia: Spring doc

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Tiene un schema.sql y un data.sql que se ejecutan después de que el origen de DataSource se haya configurado y esté listo. A continuación, se crea EntityManagerFactory y, de forma predeterminada (consulte la guía de referencia ), create-drop la base de datos para los tipos incrustados (como H2).

Puede anular este comportamiento cambiando la propiedad spring.jpa.hibernate.ddl-auto a cualquier otra cosa y luego create o create-drop .

Otra solución es cambiar el nombre de data.sql a import.sql , que se ejecutará después de que Hibernate haya creado el esquema por usted. Obviamente, ahora también puede eliminar schema.sql , ya que Hibernate creará el esquema.

Si esto es para fines de aprendizaje, debería estar bien, si desea usar esto en un sistema de producción en vivo, sugiero que en lugar de usar esto use algo como Flyway para administrar su esquema.

over 4 years ago · Santiago Trujillo Denunciar

0

Por lo que entendí, ¿desea ejecutar scripts sql en el inicio de la aplicación y luego usar Hibernate? Bueno, debe usar una de las opciones mencionadas aquí y configurar spring.jpa.hibernate.ddl-auto=none . La explicación se da allí.

Buena suerte

over 4 years ago · Santiago Trujillo Denunciar

0

Este es un código de muestra que funciona para mí:

 @DataJpaTest @TestPropertySource(properties = { "spring.datasource.schema=classpath:/sql/schema.sql", "spring.datasource.data=classpath:/sql/data.sql", "spring.jpa.hibernate.ddl-auto=none" }) class CalculatorRepositoryTest implements WithAssertions { @Autowired private CalculatorRepository repository; @Test void testAutoConfiguration() { assertThat(repository).isNotNull(); } @Test void testInsertResult() { Result newResult = new Result(); newResult.setOperation(OperationType.DIVISION.name()); newResult.setValue(10); Result insertedResult = repository.save(newResult); assertAll( () -> assertThat(insertedResult).isNotNull(), () -> assertThat(insertedResult.getId()).isEqualTo(5L), () -> assertThat(insertedResult.getOperation()).isEqualTo(OperationType.DIVISION.name()), () -> assertThat(insertedResult.getValue()).isEqualTo(10) ); } @Test void testSelectAllResults() { List<Result> results = repository.findAll(); assertAll( () -> assertThat(results).isNotEmpty(), () -> assertThat(results.get(0).getOperation()).isEqualTo(OperationType.ADDITION.name()), () -> assertThat(results.get(0).getValue()).isEqualTo(5) ); } }

schema.sql

 CREATE TABLE result( id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, operation VARCHAR(50) NOT NULL, value INT );

data.sql

 INSERT INTO result(id, operation, value) VALUES(1, 'ADDITION', 5); INSERT INTO result(id, operation, value) VALUES(2, 'SUBTRACTION', 14); INSERT INTO result(id, operation, value) VALUES(3, 'MULTIPLICATION', 10); INSERT INTO result(id, operation, value) VALUES(4, 'DIVISION', 3);

En primer lugar, no necesita anular el método findAll() . Ya está disponible en su interfaz.

Mientras configura su archivo schema.sql y data.sql , lo primero que debe hacer es establecer esta propiedad spring.jpa.hibernate.ddl-auto en none , para evitar que hibernate cree el esquema por usted.

 spring.datasource.schema=classpath:/sql/schema.sql spring.datasource.data=classpath:/sql/data.sql

Aquí mis archivos sql están en esta ubicación: test/resources/sql . De lo contrario, de forma predeterminada, no necesita esas configuraciones si pone su archivo en test/resources

Puedes encontrar muy buenos detalles en este post .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda