@Query("select count(s) from S s, TG tg where s.id = :id and tg member of s.tgs and :user member of tg.members")
@Query("select count(s) from S s, TG tg, FG fg where s.id = :id and tg member of s.tgs and :user member of fg.members and fg member of tg.members")
@Query("select count(s) from S s, TG tg, FG fg where s.id = :id and tg member of s.tgs and (:user member of tg.members or :user member of fg.members and fg member of tg.members)")
У меня 3 запроса в JPA.Цель состоит в том, чтобы подсчитать количество объектов S, в которых пользователь является участником.Объекты S связаны с двумя видами групп TG (напрямую) и FG (могут быть членами TG).Пользователь может быть членом TG или FG.
Как вы можете видеть, третьим является добавление двух первых.
Два первых запроса, похоже, работают, но третий ...:
- Когда у меня 0 пользователей, 3 запроса возвращают 0 (ожидаемое)
- Когда я добавляю пользователя в TG, первое возвращение 1 (ожидаемое), второе 0 (ожидается) и третий 0 ( не ожидается )
- Когда я добавляю пользователя в FG, которая находится в TG, 3 запроса возвращают 1 ( не ожидается Iдолжно иметь 2)
- Когда пользователь находится только в FG, первый запрос возвращает 0 (ожидается), а два других возвращают 1 (ожидается)
Я не могу понять!!!Почему третий запрос не возвращает результаты первого и второго запросов ???
Редактировать: Сущности (схемы создаются автоматически JPA)
@Entity
public class S {
@Id
@GeneratedValue
public long id;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(joinColumns = @JoinColumn(name = "s_id"), inverseJoinColumns = @JoinColumn(name = "tg_id"))
private List<TG> tgs = new ArrayList<>();
(...)
}
@Entity
public class TG extends G {
@ManyToMany(mappedBy = "tgs", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<S> ss = new ArrayList<>();
(...)
}
@Entity
public class FG extends G {
@Column(nullable = false)
public String uniqueName;
(...)
}
@Entity(name = "groupe")
public abstract class G extends Subject {
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "membres")
private Set<Subject> membres = new HashSet<>();
(...)
}
@Entity
public class U extends Subject {
@Column(unique = true, nullable = false)
public String uniqueName;
(...)
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Subject {
@Id
@GeneratedValue
public long id;
(...)
}