一般来说,编写一个选择字段的新 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/