Java - Script Spring que funciona en localhost pero no en servidor

 
Vista:
Imágen de perfil de María de Alejandría
Val: 21
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Script Spring que funciona en localhost pero no en servidor

Publicado por María de Alejandría (13 intervenciones) el 17/05/2021 11:00:20
Estoy desarrollando una app usando Spring Boot y Angular 11 que consiste en entrar en una sala e ir respondiendo cuestiones. Hice diversas pruebas en local y subí el código a un servidor .En dicho servidor todo está en orden salvo el código relacionado con la obtención de las últimas respuestas seleccionadas por los participantes (se obtienen las últimas respuestas seleccionadas puesto que cada usuario puede cambiar de decisión en cualquier momento y decantarse por otra respuesta, pero interesa almacenar todas las elecciones que han realizado conforme han ido respondiendo. Dichas elecciones se almacenan en una base de datos mysql)

El código que tengo en Spring lo muestro a continuación:

Eleccion.java(Modelo)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@Data
@JsonIgnoreProperties({"hibernateLazyInitializer"})
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ConfigurationProperties(prefix="spring.datasource")
 
 
public class Eleccion {
 
    @Id
    @GeneratedValue(strategy = IDENTITY)
    private long id;
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "idusuario", referencedColumnName = "id")
    private Usuario user;
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "idmensaje", referencedColumnName = "id")
    private Mensaje message;
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns( value = {
            @JoinColumn(name = "iteracion", referencedColumnName = "iteracion"),
            @JoinColumn(name = "idsala", referencedColumnName = "idsala")
    })
 
    private Iteracion iteracion;
    private Instant tiempoEleccion;
 
    public Instant tiempoEleccion() {
        return tiempoEleccion;
    }
 
    public Usuario getusuario() {
        return usuario;
    }
 
    public Mensaje getMensaje() {
        return mensaje;
    }
 
}


Código del método donde se define la consulta a la base de datos mySQL



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
     *
     * @param iteracion
     * @param idsala
     * @return List<Eleccion>
     */
 
 
@Query(value = "SELECT DISTINCT aux1.id, aux1.tiempoEleccion, aux1.idmensaje, aux1.idusuario, aux1.idsala, aux1.iteracion\n" +
            "FROM (SELECT c2.*, m1.idpregunta\n" +
            "\t\tFROM Eleccion c2\n" +
            "\t\tINNER JOIN Mensaje m1 ON c2.idmensaje = m1.id\n" +
            "\t\t\tWHERE c2.iteracion = ?1 AND c2.idsala = ?2 ) AS aux1,\n" +
            "\t(SELECT max(c2.tiempoEleccion) AS tiempoEleccion, m1.idpregunta\n" +
            "\t\tFROM Eleccion c2\n" +
            "\t\tINNER JOIN Mensaje m1 ON c2.idmensaje = m1.id\n" +
            "\t\t\tAND c2.iteracion= ?1\n" +
            "GROUP BY m1.idpregunta) AS aux2\n" +
            "WHERE aux1.tiempoEleccion = aux2.tiempoEleccion\n" +
            "\tAND aux1.idpregunta = aux2.idpregunta\n" +
            "ORDER BY aux1.idpregunta;", nativeQuery = true)
    List<Eleccion> UltimasElecciones(Integer iteracion, Integer idsala);


Código utilizado en el servicio

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
     * @param round
     * @param room
     * @return List<Eleccion>
     */
     @Transactional(readOnly = true)
    public List<Eleccion> UltimasElecciones(int iteracion, int idsala){
 
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(mapper.getVisibilityChecker()
        .withFieldVisibility(JsonAutoDetect.Visibility.ANY));
        return eleccionRepositorio.UltimasElecciones(iteracion, idsala).stream().collect(Collectors.toList());
    }

Código del controlador

1
2
3
4
5
6
7
8
9
10
11
/**
     * @param idsala
     * @param iteracion
     * @return List<Eleccion>
     */
 
    @GetMapping("/ultimas-elecciones/{idsala}/{iteracion}")
 
    public ResponseEntity<List<Eleccion>> getultimasRespuestas(@PathVariable int iteracion, @PathVariable int idsala) {
        return ResponseEntity.status(HttpStatus.OK).body(formService.UltimasElecciones(iteracion, idsala));
    }

Cuando hago pruebas en Postman utilizando localhost aparecen los resultados esperados, pero, en el caso de probar con un servidor público la respuesta es :

"timestamp": 1621158266985,
"status": 500,
"error": "Internal Server Error",
"message": "could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet",
"path": "/api/cuestionario/ultimas-elecciones/1/1"


No logro encontrar el motivo por el que se muestra el error, puesto que no he hecho cambios en el código y el resto de métodos que requieren consultas a la base de datos funcionan perfectamente.

Gracias de antemano por las respuestas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder