我是JPA的初学者,我不知道将查询的结果传递给属性实体。 让我在一个例子中解释一下:
我有一个名为Team的实体,另一个名为Players的实体: 球员是球队的孩子。
班组:
Public class Player{
...
@Column("STATUS_PLAYER")
private Short statusPlayer;
...
}
班主任:
amountPlayers
我有两个问题。
1)在amountFirstStringPlayers
中,我想要来自这个团队的玩家总数;
在statusPlayer
中,我希望Player
amountSecondStringPlayers
等于1的玩家总数(第一个字符串);
在statusPlayer
中,我希望Player
SELECT team FROM Team team
等于2的玩家总数(第二个字符串);
当我使用JPA查找实体时,如何获取此值。
例如:
amountPlayers
当我执行此操作时,我想要amountFirstStringPlayers
,amountSecondStringPlayers
和{{1}}。
2)将resultQuery放在实体的属性中,在实体上是一个好习惯吗?
答案 0 :(得分:2)
你可以使用hibernate公式,这些公式非常方便你不需要持久保存这些计算数据。
前:
@Formula("(select count(*) from Player p where p.team_id = id)")
private Short amountPlayers;
@Formula("(select count(*) from Player p where p.team_id = id and p.statusPLayer=1)")
private Short amountFirstStringPlayers;
@Formula("(select count(*) from Player p where p.team_id = id and p.statusPLayer=2)")
private Short amountSecondStringPlayers;
公式接受sql字符串作为参数,示例中id
是当前实体的id
。您必须替换为您的实体ID名称和列。
如果您不想使用Formula,您还可以根据团队实体中的玩家关系在内存中计算这些值。
例如:
@OneToMany(mappedBy="team")
private List<Player> players; // Here your onetomany association
public short getAmountPlayers(){
return players!= null ? players.size() : 0;
}