我正在使用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中的所有元素
答案 0 :(得分:0)
好吧,我想我会疯了。我尝试了所有可能的查询组合,它的工作原理如下:
select from Book b where 1 member of specsId
请注意,我第一次尝试的代码的唯一区别是我没有指定b.specsId但只留下specsId 我仍然不知道为什么这样它有效而不是相反(它应该更具体),所以如果有人能够为我解释这种神秘感,我将非常感激!