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

151
Vistas
Para una entidad JPA con una relación de muchos a 1 con una entidad de datos, ¿cómo ordenar una lista de objetos por el resultado de una llamada de método de la entidad de datos?

Tengo un usuario de entidad JPA, que contiene una relación OneToMany con una entidad UserStats. Refactoricé el código existente para usar esta nueva entidad UserStats y, anteriormente, para administrar las características dependientes de la proporción de victorias, estaba almacenando la proporción de victoria dentro de la entidad Usuario como una propiedad.

Sin embargo, decidí que sería mejor simplemente tener un método que devolviera el índice de victoria, por lo que se implementó el cálculo de índice de victoria () en la entidad UserDetails.

Esto ha causado algunos problemas, por ejemplo, tenía un método de repositorio dentro de UserRepo:

 List<User> findAllByOrderByVictoryRatioDesc();

Ya no puedo buscar esto directamente en el repositorio, ya que el método VictoryRatio () está dentro de UserStats de la entidad Usuario, y no creo que pueda llamar a los métodos en un método de repositorio de todos modos.

Así que ahora estoy tratando de hacerlo dentro del servicio de usuario, pero no puedo resolverlo:

 public List<User> getBestVSUsers() { List<User> users = userRepository.findAll(); for (User user: users ) { user.getUserStats().get(0).calculateVictoryRatio(); } }

Pero necesito ordenar la lista anterior según el resultado de computeVictoryRatio().

También en mi interfaz React estaba renderizando esto:

 const topUserList = users.map(user => { return <tr key={user.id}> <td style={{ whiteSpace: 'nowrap' }} class="player-list-key-text">{user.name}</td> <td className="player-list-key-text">{user.username}</td> <td className="player-list-key-text"><span className="defeats">{user.victories}</span></td> <td className="player-list-key-text"><span className="victories">{user.defeats}</span></td> <td className="player-list-key-text"><span className="victory-score">{user.victoryRatio}</span></td> </tr> });

¿Cómo puedo representar el índice de victoria, las derrotas y las victorias como se indica arriba ahora que están encapsulados dentro de la entidad UserStats? ¿Necesito hacer una búsqueda separada y combinar los 2? O puedo hacer algo como:

{usuario.userStats[0].victorias}

¿Cómo puedo hacer esto? ¿Hay una mejor manera de hacer esto? ¿Puedo llamar a métodos dentro del userRepo?

Gracias por la ayuda

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Prueba algo como esto:

 PageRequest pageRequest = new PageRequest(pageNumber, pageSize, new Sort(new Order(Direction.DESC, "ORDER BY (VICTORIES/DEFEATS)")) Page page = myRepository.findAll(specification, pageRequest);

Donde en ORDEN POR puede poner su fórmula de proporción. En este caso, ponemos el cálculo en su SGDB.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede realizar un pedido en una entidad relacionada siempre que se una a esa entidad en la consulta. Es posible que deba definir una consulta personalizada en su repositorio.

 @Query("SELECT u from User u JOIN u.userStats us ORDER BY us.victoryRatio") List<User> findAllCustomSort();

Sin embargo, obviamente el motor de la base de datos hace la clasificación aquí, independientemente de su código. No nos ha mostrado el contenido de su método de calculateVictory de la victoria, pero si debe ordenar en función de un cálculo que realiza en el código, no funcionará. Dudo que este sea el caso, ya que solo está hablando de mover la proporción a otra entidad, no de comenzar a calcularla. Pero si es así, por supuesto, siempre puede simplemente ordenar la lista en la memoria. Teniendo en cuenta que no está utilizando la paginación, esto tampoco sería tan malo.

O si es absolutamente necesario ordenar en la base de datos, entonces no creo que tenga más remedio que crear una función personalizada para ello en la base de datos. Sin embargo, eso iría un poco más allá del alcance de esta pregunta.

about 4 years ago · Juan Pablo Isaza 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