HQL-запрос не работает должным образом

0

У меня есть некоторые проблемы с запросом HQL:

@Query("Select s from Sport s JOIN s.categories as c where s.sportId = :sportId and c.categoryId = :categoryId")
Iterable<Sport> findByCategoryIdAndSportId(@Param("sportId")Long sportId, @Param("categoryId")Long categoryId);

Этот запрос возвращает все категории (кажется, он игнорирует второй пункт AND), но только спорт, который соответствует спорту.

Это мои классы, которые представляют Спорт и Категория:

@Entity
@Table(name = "Sports")
public class Sport  implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long sportId;
    @OneToMany(mappedBy = "sportId")
    @ApiModelProperty(required = true)
    @JsonManagedReference
    private Set<Category> categories;

    @Column
    private String sportName;

    ....get and set

А также

@Entity
@Table(name = "Categories")
public class Category implements Serializable
{
    @ManyToOne
    @JoinColumn(name = "sportId", nullable = false)
    @JsonBackReference
    private Sport sportId;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long categoryId;

    ..get and set

РЕДАКТИРОВАТЬ

Предположим, что:

Sport:
  |sportId | SportName  
  |1       |Rugby      
  |2       |Basket       
  |3       |Tennis 

И Категории:

  |categoryId | CategoryName | sportId|
  |1          |Italy         |1       |
  |2          |England       |2       | 
  |3          |USA           |1       |
  |1          |Spain         |2       |

Я хочу получить с моим запросом (предположим sportId = 1 и categoryId = 1):

| sportId | SportName | categoryId | CategoryName |
   1         Rugby       1             Italy

Кто-то может мне помочь? заранее спасибо

  • 0
    Какой результат вы хотите получить от запроса? Хотите ли вы отфильтровать все виды спорта с sportId и категорией ассоциации, чтобы в ней содержались только те категории, которые имеют данный categoryId?
  • 0
    Я предполагаю, что со всеми категориями вы имеете в виду коллекцию категорий в классе Sport. Вы не можете уменьшить содержание этой коллекции с помощью запроса.
Показать ещё 2 комментария
Теги:
hibernate
jpa
hsqldb

1 ответ

0

Это не сработает. Посмотри на это.

Вы можете инвертировать запрос, чтобы получить категории, имеющие определенный вид спорта:

Select c from Categories c JOIN Sport s where c.categoryId = :categoryId and s.sportId = :sportId

Ещё вопросы

Сообщество Overcoder
Наверх
Меню