java - 创建新的 NamedQuery 或构建新的 List 以返回字段值?

标签 java sql orm jpa persistence

一般来说,编写一个选择字段的新 NamedQuery 是否更好,

@NamedQuery(name="getEntityField",
            query="select e.field from Entity e where <condition>")

还是应该从 Entity...中选择 e 然后构建一个新列表?

List<Entity> entities = query.getResultList();
List<Object> fields = new ArrayList<Object>();
for (Entity e : entities) {
    fields.add( e.getField() );
}

如果其中一种模式更好,为什么?

最佳答案

当您使用 NamedQuery 执行此操作时,数据库只需将包含该字段内容的列表发送回应用程序,而不是完整的实体(表的所有列)。

另一方面,如果实体已经在您的 ORM 框架的缓存中,那么要获取实体,它甚至根本不需要访问数据库。

也可能是您的 ORM 框架足够智能,可以理解查询,因此它可以从缓存中执行查询,而不是转到数据库。

什么最有效取决于您的应用程序的情况和您使用的 ORM 框架。尝试这两种方法,让您的 ORM 框架记录它所做的事情,并查看日志以了解它所做的事情并确定哪种方法更适合您的特定应用程序。

关于java - 创建新的 NamedQuery 或构建新的 List 以返回字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705215/

相关文章:

java - 生产者消费者修改

java - 在 TCP 网关中发送响应后向 Spring Integration 中的 serviceActivator 发送消息

基于 MySQL 语句的复制 : Does binlog contain exact queries executed on master?

php - 如何在 Propel 中使用 MySQL 函数

java - 从hibernate sql join获取多个实体

java - 如何在addBatch()中添加SELECT语句?

java - @SessionTarget, hibernate session 为空

sql - NTILE 的动态参数

java - 使用jdbc向数据库中插入数据

Django 跨反向关系聚合