Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建新名称查询或生成新列表以返回字段值?_Java_Sql_Orm_Jpa_Persistence - Fatal编程技术网

Java 创建新名称查询或生成新列表以返回字段值?

Java 创建新名称查询或生成新列表以返回字段值?,java,sql,orm,jpa,persistence,Java,Sql,Orm,Jpa,Persistence,一般来说,编写一个选择字段的新NamedQuery更好吗 @NamedQuery(name="getEntityField", query="select e.field from Entity e where <condition>") 如果其中一种模式更好,为什么?当使用命名查询时,数据库只需将包含该字段内容的列表发送回应用程序,而不必发送完整的实体(表中的所有列) 另一方面,如果实体已经在您的ORM框架的缓存中,那么为了获得实体,它甚至不需要进入数据库

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

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

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

当使用
命名查询时,数据库只需将包含该字段内容的列表发送回应用程序,而不必发送完整的实体(表中的所有列)

另一方面,如果实体已经在您的ORM框架的缓存中,那么为了获得实体,它甚至不需要进入数据库

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


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

使用命名查询可以更明确地显示您有哪些类型的查询。例如,用于以后的维护。我个人不喜欢在“业务层”中构建SQL字符串,我喜欢在实体bean中

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