Java 创建新名称查询或生成新列表以返回字段值?
一般来说,编写一个选择字段的新NamedQuery更好吗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(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() );
}