0

接続されている JPA の Game と GameScore の 2 つのエンティティがあります。プレーヤーがゲームに参加すると、新しい GameScore が作成されます。しかし、プレイヤーが参加していないゲームを取得する必要があります(GameScoreを持っていません)。どうすればそれができますか?NamedQueries と CriteraBulder で試しましたが、結果はありませんでした。

ゲーム終了:

package prayForHunt.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
@Entity
@NamedQueries({
@NamedQuery(name = Game.Q_GET_ALL_GAMES, query = "SELECT c FROM Game c"),
})
  public class Game implements Serializable {

//--------------------------------------------
@Id
@GeneratedValue
private int gameId;
//--------------------------------------------      
@OneToMany(cascade = CascadeType.ALL, mappedBy = "game")
private List<GameScore> gameScore;
}

GameScore エンティティ

package prayForHunt.model;

import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
import javax.persistence.metamodel.SingularAttribute;

@Entity
@NamedQueries(
@NamedQuery(name = GameScore.Q_GET_ALL_GAMESCORE, query = "SELECT c FROM GameScore c")
)
public class GameScore implements Serializable {

@Id
@GeneratedValue
private int gameId;
@ManyToOne
protected Game game;
@ManyToOne
protected Player player;

 }
4

1 に答える 1

0

結果として必要なのは、 gameScoreが空である Game エンティティのすべてのインスタンスです。スコアなしでゲームを取得するための JPQL クエリは次のとおりです (名前付きクエリでも使用できます)。

SELECT g FROM Game g WHERE g.gameScore IS EMPTY

同等の基準クエリは次のとおりです。

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Game> cq = cb.createQuery(Game.class);
Root<Game> member = cq.from(Game.class);
cq.select(member)
  .where(cb.isEmpty(member.<Collection>get("gameScore")));        
em.createQuery(cq).getResultList();
于 2012-06-10T06:07:24.667 に答える