Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

149
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda