2017-07-05 6 views
-1

私はJPAの初心者ですが、属性エンティティへのクエリの結果を渡すことはできません。 私は一例で説明しましょう:属性へのクエリの結果

私はチームと呼ばれるエンティティを持っており、プレイヤーと呼ばれる別の人がいます: プレーヤーはTeamの子です。

クラスチーム:

public class Team{ 
... 

(relationship with Player has been hidden) 
... 

@Column(name = "AMOUNT_PLAYERS") 
private Short amountPlayers; 

@Column(name = "AMOUNT_FIRSTSTRING_PLAYERS") 
private Short amountFirstStringPlayers; 

@Column(name = "AMOUNT_SECONDSTRING_PLAYERS") 
private Short amountSecondStringPlayers; 

... 

} 

クラスプレーヤー:

Public class Player{ 

... 

@Column("STATUS_PLAYER") 
private Short statusPlayer; 
... 

} 

私はこのことについて2つの質問があります。

1)amountPlayersには、このチームのプレーヤーの数が欲しいです。
amountFirstStringPlayersでは、statusPlayerのプレイヤー(ファーストストリング)の総数をPlayerとしたいと思います。
amountSecondStringPlayersには、statusPlayerのプレイヤー(2番目のストリング)の合計がPlayerと2になります。
JPAでエンティティを見つけると、この値をどのように取得できますか。
例:

SELECT team FROM Team team 

私はこれを実行すると、私はamountPlayersamountFirstStringPlayersamountSecondStringPlayersをしたいです。

2)エンティティの属性にresultQueryを入れます。エンティティは良い方法ですか?

+0

ない選択*チームからのデータベースからすべてのこれらの値を返すか、あなたはコメントをデータベース –

+0

おかげ@RahulSinghからretrival後のデータのいくつかの処理をしたい、私はそれを行うと私が使用2番目のオプションと私のためにうまく動作します。しかし、エンティティを使用してこれを行う方法があるかどうか、それが良い方法であるかどうかを知りたいと思います。ちょうど知識によって。 –

答えて

2

これらの計算されたデータを本当に保持する必要がない場合には、非常に便利な休止状態式を使用できます。

EX:

@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の名前と列に置き換える必要があります。

数式を使用しない場合は、チームエンティティのプレーヤー関係に基づいて、これらの値をメモリ内で計算することもできます。

例:

@OneToMany(mappedBy="team") 
private List<Player> players; // Here your onetomany association 

public short getAmountPlayers(){ 
return players!= null ? players.size() : 0; 
} 
関連する問題