【发布时间】:2017-08-23 08:22:15
【问题描述】:
我有一个名为 Test.java 的实体,它有 70 个字段,其中一些字段还与其他实体相关(通过一对多、多对一等关联)。
我需要一个这种类型的对象,但我不需要所有字段,只需要其中的 3 个字段,一个字段与其他实体有外键关系。
所以,我在执行查询时编写了一个本机查询 jpa 执行其他查询也会导致花费这么多时间来完成。
这是我的实体类:
public Class Test implements Serializable{
@Id
private int id;
@ManyToOne
@JoinColumn(name = "STATUSID")
private xxxxx xxxxx;
/// other fields, getters and setters
}
这是我的原生查询
public List<Order> getAllOpenOrders() {
final String query = "SELECT t.* from T_TEST";
Query createNativeQuery = em.createNativeQuery(query, Test.class);
List<Order> resultList = createNativeQuery.getResultList();
return resultList;
}
如何获取带有选定字段的订单实体对象,我不需要其他字段意味着我只使用这三个字段来实现我的功能。
如何停止其他查询的执行?
谢谢。
【问题讨论】:
-
正在执行哪些“其他查询”?您是如何发现与此原生查询一起运行的其他查询的?
-
我使用 jpa 和 eclipse 链接作为持久性提供程序,我可以在 glassfish 服务器日志中看到 SQL 日志。其他查询意味着该实体也与其他实体有关系。所以与其他实体相关的查询也进入日志文件
-
我认为在调用本机查询之前,您可能正在执行更多查询(不是本机查询,而是休眠查询,如 entitymanager.persist 等)。 Hibernate 不会立即执行非本地查询,当您发送本地查询时,它也会执行所有待处理的非本地查询。