1

我正在使用 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
}

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

现在我使用 Spring 来管理与数据库的连接,因此我有使用 entityManager 查询数据库的 DAO 和服务。

到目前为止,我尝试了很多查询,首先是反转显然不起作用的“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 表中的所有元素

4

1 回答 1

0

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

select from Book b where 1 member of specsId

请注意,我第一次尝试的代码的唯一区别是我没有指定 b.specsId 但只留下 specsId 我仍然不知道为什么这样它可以工作,但反过来不行(它应该更具体) ,所以如果有人愿意为我解释这个谜团,将不胜感激!

于 2014-02-26T15:21:19.560 回答