【问题标题】:Query by setting parameter for mapped entity in JPA通过设置JPA中映射实体的参数进行查询
【发布时间】: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


【解决方案1】:

GAE 不允许加入,如您的 cmets 中所述。如果你尝试这样做,你应该会得到一个错误。

应使用标准 log4j(互联网搜索其文档)或 java.util.logging 启用日志。它们允许 CLASSPATH 根目录中的配置文件来配置记录的数量。根据配置,可以将事情记录到控制台或文件中

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 2013-01-22
    • 1970-01-01
    • 2011-07-13
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多