0

我有两个 JPA 实体,Game 和 GameScore 是连接的。如果玩家加入游戏,则会为他制作一个新的 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

因此,结果需要的是所有这样的 Game 实体实例,其中 gameScore为空。用于获取没有分数的游戏的 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 回答