【发布时间】:2014-08-23 16:20:59
【问题描述】:
我的项目有两个实体 User 和 Item 在一对多的关系中。父 User 实体由 Item 实体中的字段“所有者”映射,并使用 Fetchtype.LazyLoad 进行注释。
物品实体:
Item{
//other fields..
@Manytoone(@FetchType=LazyLoad)
User owner;
//getters and setters...
}
现在我正在查询获取其父用户实体的性别设置为女性的项目,如下所示:
String queryString="Select i from Item AS i where i.owner.gender='Female'"
Query q=QueryFactory.createQuery(queryString);
List<Item> result=q.getResultList();
我的问题是这种查询是否可行?如果可以,注释 LAZYLOAD 是否会对获取结果产生任何影响,因为据我了解,加载 Item 实体时不会隐式加载 owner 字段。
【问题讨论】:
-
测试时会发生什么?打开 SQL 日志,查看执行了哪些 SQL 查询,将
= Female更改为= 'Female',使用调试器逐步执行代码,查看每一步加载的内容。 -
我没试过。顺便说一句,我如何打开 sql logging?我的项目是 google app engine 项目,我正在使用 Eclipse IDE。
-
你的意思是,GAE/数据存储?还是 GAE/CloudSQL?前者不允许查询中的联接
-
我正在使用 GAE/Datastore。所以我的代码无法正常工作?
-
那么你应该用 GAE 标记你的问题。 JPA 在 GAE 上受到严格限制,通常 JPA 支持的查询中的连接不在 GAE 上。
标签: google-app-engine jpa google-cloud-datastore