我正在使用 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 表中的所有元素