结果查询属性

时间:2017-07-05 15:17:38

标签: java hibernate jpa

我是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

当我执行此操作时,我想要amountFirstStringPlayersamountSecondStringPlayers和{{1}}。

2)将resultQuery放在实体的属性中,在实体上是一个好习惯吗?

1 个答案:

答案 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;
}