JPA Подсчет членов - PullRequest
       6

JPA Подсчет членов

0 голосов
/ 30 ноября 2018
@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.

Как вы можете видеть, третьим является добавление двух первых.

Два первых запроса, похоже, работают, но третий ...:

  1. Когда у меня 0 пользователей, 3 запроса возвращают 0 (ожидаемое)
  2. Когда я добавляю пользователя в TG, первое возвращение 1 (ожидаемое), второе 0 (ожидается) и третий 0 ( не ожидается )
  3. Когда я добавляю пользователя в FG, которая находится в TG, 3 запроса возвращают 1 ( не ожидается Iдолжно иметь 2)
  4. Когда пользователь находится только в 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;

  (...)

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...