App Engine查询,使用Collection上的位置

时间:2014-02-24 20:16:16

标签: java list google-app-engine jpa members

我正在使用App Engine数据存储区开发应用程序,由于不支持“多对多”关系,我想使用数据库的其他功能来帮助自己编写应用程序。

实际上,我存储了一个列表,其中包含我必须与另一个表链接的每个对象中相关对象的ID。

注意:我正在使用Java和JPA。

这是我使用的课程

@Entity
public class Book {
    @Id
    private Long id;
    @ElementCollection
    private List<Long> specsId = new ArrayList<Long>();
    // ... getters & setters & other properties
}

现在我想查询数据库,过滤所有具有特定值(或某些值的组合)的书籍。

现在我使用Spring来管理与数据库的连接,所以我有DAO和Services使用entityManager查询数据库。

到目前为止,我尝试了大量的查询,从反转“in”运算符开始,显然不起作用

select from Book b where (1, 2) in b.specsId

或者只是尝试使用

select from Book b where b.specsId = 1

查看它是否仅返回其specsId中至少包含“1”的书,但查询返回了数据存储区中的每本书。

然后我在这里找到另一个类似的问题,建议使用

select from Book b where 1 member of b.specsId

但是这只是犯了错误(在类Book上没有名为b的成员的元数据你确定在查询中提供了正确的成员名吗?)

那么......有没有办法用手写的查询或者使用javax.persistence.EntityManager提供的函数来做到这一点?

提前谢谢

编辑按照建议我也尝试了

select b from Book b where b.specsId in (list)

但是给了我Book Book中的所有元素

1 个答案:

答案 0 :(得分:0)

好吧,我想我会疯了。我尝试了所有可能的查询组合,它的工作原理如下:

select from Book b where 1 member of specsId

请注意,我第一次尝试的代码的唯一区别是我没有指定b.specsId但只留下specsId 我仍然不知道为什么这样它有效而不是相反(它应该更具体),所以如果有人能够为我解释这种神秘感,我将非常感激!