【问题标题】:JPA Optimizing using custom queries使用自定义查询进行 JPA 优化
【发布时间】:2015-07-27 06:01:33
【问题描述】:

我正在使用 JPA/Hibernate 作为 ORM,现在想要优化我的查询以仅加载特定端点的必要数据。仅加载特定类的属性子集然后将其转换为 JSON 的最佳方法是什么?对于端点,我使用 Spring MVC 和 Jackson JSON Mapper。

我想出的方法,我还没有测试过。

  1. 创建只包含必要属性的 POJO 对象和 使用属性映射查询字段 @SqlResultSetMapping.

    这种方法需要添加很多额外的类,但其他 看起来还不错。

  2. 忽略数据库查询中的开销并限制我的 使用 JSONViews 响应数据。

    这很快就会变得一团糟,把不同的东西放在一起 JSONViews 看起来很乏味。对于大多数查询,开销肯定是 微不足道,但我很好奇如何映射更大更复杂 查询。

  3. 使用 Java.sql.PreparedStatements 并手动映射 ResultSet。 另外使用 @JsonInclude(Include.NON_NULL) 只使用非空 价值观。现在这对我来说似乎是最好的解决方案,但它忽略了 完全 JPA,我不确定这是否应该是我的解决方案。 我知道我失去了 ORM 的所有优势,但似乎每个 其他解决方案需要类似或更复杂的工作。

  4. ???

在过去的几个月里,我主要使用 JavaScript/Node 进行开发,我喜欢我可以准确地生成响应所需的对象。有没有推荐的方法来做这些事情,对我来说这似乎是一个常见的用例。

谢谢

【问题讨论】:

标签: java spring spring-mvc jpa jackson


【解决方案1】:

我们以前总是使用 POJO 对象来满足这些需求,但有时使用“选择新”构造比结果映射更合适。

select new com.example.MyClass(id, ...) From MyObject

也许你可以考虑一下。

【讨论】:

  • 我不知道这存在,效果很好。当然,如果我想对对象做更多事情,我将创建一个 POJO,但我的大多数端点都直接返回该对象。如果有人想添加任何内容,我将让这个问题开放一天左右,但我会在接下来的几天里除了你的答案。
  • 是的,如果你只是想限制属性的数量,你可以为你的映射对象创建另一个构造函数并使用这种“选择新的”方法而不创建额外的 POJO
猜你喜欢
  • 2018-05-18
  • 2016-10-05
  • 2012-05-18
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多