我正在使用Spring JPA,并且为了将字符串列表添加到我的实体中,我正在使用@ElementCollection,如下所示。

@ElementCollection
private Map<Integer, String> categories;

当我使用它时,它将生成一个名为subscription_categories的表,其中包含以下列subscription(varchar), catergories(varchar) and caterogies_key (int)
如果我在桌面上使用SQL工具,则可以使用以下命令查询此表
select `subscription_categories`.`subscription` from `subscription_categories` where `subscription_categories`.`categories`='TESTING';

但是,当我尝试在Spring Data中使用它时,它将失败,并显示“...未映射”错误

以下是一些尝试:
@Query("select s.subscription from subscription_categories s where s.categories = ?1")
    List<Subscription> findUsernameByCategory(String category);



@Query("select s.subscription from categories s where s.categories = ?1")
    List<Subscription> findUsernameByCategory(String category);

两者都返回相同的错误。



我的问题是:

如何查询@ElementCollection创建的表?

最佳答案

您不能直接从@ElementCollection查询。您应该查询基本实体(我假设它的名称是Subscription)。

@Query("select s from Subscription s where s.categories = ?1")
List<Subscription> findUsernameByCategory(String category);
如果要按键查询,请使用
@Query("select s from Subscription s where index(s.categories) = ?1")
List<Subscription> findUsernameByCategoryKey(Integer key);

07-24 18:42
查看更多