我目前正在开发一个僵尸迷你游戏,并且很难编写JPA规范。
我需要恢复我的所有游戏中至少有一个未感染参与者的列表。
我的结构如下:
@Entity
@Table(name = "game", schema = "public")
public class Game {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "game_id_seq")
@SequenceGenerator(name = "game_id_seq", initialValue = 1, allocationSize = 1)
@Column(name = "id")
private int id;
@Basic
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "game")
private Collection<Participant> participants;
}
@Entity
@Table(name = "participant", schema = "public")
public class Participant {
@ManyToOne
@JoinColumn(name = "id_game", referencedColumnName = "id", insertable = false, updatable = false)
private Game game;
@Basic
@Column
private Boolean infected;
}
我尝试过:
private static Specification<Game> getRunning() {
return (root, criteriaQuery, criteriaBuilder) -> {
CollectionJoin<Game, Participant> participantJoin = root.join(Game_.participants, JoinType.LEFT);
Predicate p = criteriaBuilder.isNotEmpty(criteriaBuilder.isFalse(participantJoin.get(Participant_.infected)));
return p;
};
}
还有:
private static Specification<Game> getRunning() {
return (root, criteriaQuery, criteriaBuilder) -> {
CollectionJoin<Game, Participant> participantJoin = root.join(Game_.participants, JoinType.LEFT);
Predicate p = criteriaBuilder.notEqual(
criteriaBuilder.count(
criteriaBuilder.equal(participantJoin.get(Participant_.infected), false)), 0);
criteriaQuery.distinct(false);
return p;
};
}
还有许多其他解决方案...
可悲的是,这些代码都不起作用。我知道我想念什么,但我找不到。
谢谢。