我有一个JPA实体用户,它包含一个与UserStats实体的OneToMany关系。我重构了现有代码,以使用这个新的UserStats实体,并在之前管理与胜利率相关的特性,我将胜利率作为属性存储在用户实体中。
然而,我认为最好是让一个方法返回victoryRatio,因此CalculativeCoryRatio()被实现到UserDetails实体中。
这导致了一些问题,例如,我在UserRepo中有一个repository方法:
List<User> findAllByOrderByVictoryRatioDesc();
我不能再直接在repo中搜索它,因为victoryRatio()方法位于User实体的UserStats中,而且我认为您无论如何都不能在repo方法中调用方法?
所以我现在尝试在userService中做,但无法弄清楚:
public List<User> getBestVSUsers() {
List<User> users = userRepository.findAll();
for (User user: users
) {
user.getUserStats().get(0).calculateVictoryRatio();
}
}
但是,我需要对上面的列表进行排序的基础上的计算结果Victoria yRatio().
在我的React前端中,我还呈现了以下内容:
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>
});
现在,胜利比、失败和胜利都封装在UserStats实体中,我如何才能像上面那样呈现它们?我需要单独提取并合并2吗?或者我可以这样做:
{user.user统计[0]。胜利}
如何做到这一点?有更好的方法吗?我可以在userRepo中调用方法吗?
谢谢你的帮助
只要在查询中加入相关实体,就可以对该实体进行订购。您可能需要在存储库中定义自定义查询。
@Query("SELECT u from User u JOIN u.userStats us ORDER BY us.victoryRatio")
List<User> findAllCustomSort();
然而,很明显,数据库引擎在这里独立于代码进行排序。您尚未向我们显示CalculateCurvatory方法的内容,但如果您必须根据在代码中执行的计算进行排序,则无法正常工作。我对此表示怀疑,因为你只是在谈论将比率移动到另一个实体,而不是开始计算它。但如果是这样的话,你当然可以在内存中对列表进行排序。考虑到您没有使用分页,这也不会太糟糕。
或者如果您绝对必须在数据库中进行排序,那么我认为您别无选择,只能在数据库中为其创建一个自定义函数。不过,这有点超出了这个问题的范围。
试试这样的东西:
PageRequest pageRequest = new PageRequest(pageNumber, pageSize, new Sort(new Order(Direction.DESC, "ORDER BY (VICTORIES/DEFEATS)"))
Page page = myRepository.findAll(specification, pageRequest);
你可以把你的比率公式放在哪里。在这种情况下,我们将计算放在SGDB上。
我有一个JPA实体(人)与其他实体(地址)有多对一的关系。在一个对象可以被系统使用之前,这个对象必须得到主管的批准。我将原始实体存储为byte[]并对“工作”实体进行更改,并将其存储在数据库中。如果这些更改不被批准,我必须恢复原始状态。因此,我将存储的原始数据从byte[]中转换出来,并使用实体管理器将其合并到数据库中。所有的工作都很好,但是如果一个新的地址实体已经添加到“工作”的人,在合并还原的
假设我有两个核心数据实体。一个学生实体和一个类实体。在这个例子中,一个学生正好在一个班级中,一个班级可以有很多学生。 我们也假设这些是大类。也就是说,每个班有1000名学生。 类实体如下所示: 和学生实体: 在我的UI中,我想显示一个类。我想显示有一定分数的学生人数。一、 对于一个1000名学生的班级,50名学生得了a,500名学生得了B,200名学生得了C,以此类推。 从核心数据中获取这些计数的
我有一个实体CandidateTransaction和CandidateTransactionRepository扩展了CrudRepository 我正在使用CrudRepository的save方法来保存所述实体的对象。当实体没有行时,它将创建一个自动生成的键并将其插入ID列,而不需要Java端的干预。 而且,由于CrudRepository的save()方法检查实体是否是新的,如果是新的,它
我有一个jpa实体,比如entityA和另一个实体,比如entityB,它们之间没有任何映射/关联。我想在更新或保存EntityA时对entityB执行一些JPQL或操作。例如,假设我保存了新的entityA,所以我想在entityB上运行一些自定义JPQL查询,或者由于新保存了entityA而从DB中删除entityB。我想使用EntityListener,但我不知道如何使用,因为我在myh自定
问题内容: 有一个实体类“ A”。A类可能具有相同类型“ A”的子级。如果“ A”是孩子,则也应保留它的父母。 这可能吗?如果是这样,我应该如何在Entity类中映射关系?[“ A”有一个id列。] 问题答案: 是的,这是可能的。这是标准双向@ManyToOne/ @OneToMany关系的特例。之所以特别是因为关系两端的实体都是相同的。JPA 2.0规范的第2.10.2节详细介绍了一般情况。 这
java 持久实体