【问题标题】:Searching across of 2x entities JPA搜索 2x 实体 JPA
【发布时间】:2012-06-13 10:15:16
【问题描述】:

我有两个 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;

 }

【问题讨论】:

    标签: jpa jpql criteria-api named-query


    【解决方案1】:

    所以结果需要的是所有这样的 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();
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      相关资源
      最近更新 更多