Java 应用程序引擎查询,使用集合上的where
我正在使用AppEngine数据存储开发一个应用程序,由于不支持多对多关系,我想使用数据库的其他功能来帮助自己编写应用程序 事实上,我正在存储一个列表,其中包含必须与另一个表链接的每个对象中的相关对象的ID 注意:我使用Java和JPA来完成所有工作 这是我使用的类Java 应用程序引擎查询,使用集合上的where,java,list,google-app-engine,jpa,members,Java,List,Google App Engine,Jpa,Members,我正在使用AppEngine数据存储开发一个应用程序,由于不支持多对多关系,我想使用数据库的其他功能来帮助自己编写应用程序 事实上,我正在存储一个列表,其中包含必须与另一个表链接的每个对象中的相关对象的ID 注意:我使用Java和JPA来完成所有工作 这是我使用的类 @Entity public class Book { @Id private Long id; @ElementCollection private List<Long> specsId
@Entity
public class Book {
@Id
private Long id;
@ElementCollection
private List<Long> specsId = new ArrayList<Long>();
// ... getters & setters & other properties
}
或者只是尝试使用
select from Book b where b.specsId = 1
查看是否只返回specsId中至少包含“1”的图书,但查询返回数据存储中的每本图书
然后我在这里发现了另一个类似的问题,建议使用
select from Book b where 1 member of b.specsId
但这只是抛出了错误(类目簿上名为b的成员没有元数据。您确定在查询中提供了正确的成员名称吗?)
所以。。。有没有一种方法可以使用手写查询或使用javax.persistence.EntityManager提供的函数来实现这一点
先谢谢你
按建议编辑,我也试过了
select b from Book b where b.specsId in (list)
但是把书桌上的所有元素都还给了我好吧,我想我疯了。我尝试了各种可能的查询组合,结果如下:
select from Book b where 1 member of specsId
请注意,我第一次尝试的代码中唯一的区别是我没有指定b.specsId,而是只保留specsId
我仍然不知道为什么会这样,但不是相反的方式(它应该更具体),所以如果有人愿意为我解释的迷雾将不胜感激 您是否在私有列表specsId上使用@EllementCollection注释,我没有看到。请让我知道对不起,是的,我忘记写了!我现在就更新这个问题!很多都支持正常的JPA(无主)关系。我知道这一点,但我真的不知道/不明白如何查询数据库。我可能需要使用连接吗?如果你能给我指出正确的方向,我愿意自己做实验!如果你对谷歌插件的查询有问题,那么在日志中查看它发送的GAE/数据存储查询
select from Book b where 1 member of specsId