我正在使用Spring JPA,为了向我的实体添加String列表,我正在使用@ElementCollection,如下所示。
class BaseStrategy
class << self
def inherited(klass)
register_strategy(klass)
end
def register_strategy(strategy)
puts "Adding strategy #{strategy}"
end
end
end
class Foo < BaseStrategy
end
当我使用它时,它会生成一个名为@ElementCollection
private Map<Integer, String> categories;
的表,其中包含以下列subscription_categories
如果我在桌面上使用我的SQL工具,我可以使用以下
查询此表subscription(varchar), catergories(varchar) and caterogies_key (int)
但是,当我尝试在Spring Data中使用它时,它会失败,并且#34; ...未映射&#34;错误
以下是一些尝试:
select `subscription_categories`.`subscription` from `subscription_categories` where `subscription_categories`.`categories`='TESTING';
两者都返回相同的错误。
引起:org.hibernate.hql.internal.ast.QuerySyntaxException: 类别未映射
我的问题是:
如何查询@ElementCollection创建的表?
答案 0 :(得分:4)
您无法直接从PForm1 f= new PForm1();
if(f.ShowDialog()!=DialogResult.OK){
//...
}
PForm2 f2= new PForm2();
if(f2.ShowDialog()!=DialogResult.OK){
//...
}
//....
查询。您应该查询基本实体(我假设其名称为@ElementCollection
)。
Subscroption
如果要按键查询,请使用
@Query("select s from Subscroption s where s.categories = ?1")
List<Subscription> findUsernameByCategory(String category);
答案 1 :(得分:2)
在这一点上,我也支持@talex,并认为您需要将查询基于@ElementCollection的父/容器/基础对象。
以我的经验,以下查询就足够了:
@Query("select category from Subscription subscription inner join subscription.categories category")
旁注:查询subscription_categories似乎是错误的路径,因为该表是另一个层(Sql / Jpql中的数据库层)的一部分,而查询应在Hibernate层(hql)上形成,使用您的实体/类名作为参考。 我使用的是大写的类名,而不是小写的表名。