为了回答我的问题,我在学校做一个以前在过去学期里做过的项目。因此,在设计和开发中做出的选择是我不能百分之百肯定的事情,所以我不能评论为什么事情是这样设置的背后的理由。我还查看了Apache标记上的所有问题,但找不到解决这一问题的方法。如果我弄错了,请告诉我,我很乐意检查一下。
本质上,我们有一个有大量列的表,我只希望加载其中的几个列(否则会有太多不必要的数据被查询,而且加载页面需要更长的时间)。
作为一个示例,为了保持它的通用性,假设我有一个具有10列的对象的表。我只想要三列。因此,在我的代码中,我会这样做:
public List<objectToQuery> getSpecificColumns() {
ObjectContext context = getNewContext();
SQLTemplate select = new SQLTemplate(objectToQuery.class, "select column1, column2, column3 from table");
List<objectToQuery> results = context.performQuery(select);
return results;
}当我运行它时,它工作并返回适当的行数。但是,当我尝试与数据交互和检索数据时,它将在包含所有列的每一行上运行单独的查询。
因此,举个例子,如果在页面上得到了我会得到的结果:
object.getColumn1();它将对所有列的对象运行一个查询.为什么会发生这种情况,有没有办法完成我想要做的事情?
非常感谢,-R
发布于 2019-12-10 11:49:46
在卡宴,你不能获取一个部分对象。或者更确切地说,只要ID列存在,就可以获取它,但是对象将处于“空心”状态。然后,每当您尝试读取这类对象的属性时,它将从DB (您所观察到的正是如此)被懒散地解析出来。部分对象获取特性是最近被要求的,因此这种情况可能很快就会改变。
现在您有两个选择:
ObjectSelect.columnQuery(..)),这将产生一个Object[]列表的结果,其中每个数组都包含单个DB行的指定列的值。在前一种情况下,您保留了对象模型,牺牲了一些额外的内存(可能还包括获取速度),在后一种情况下,您优化了查询,但处理了原始数据。编程通常是关于权衡的,毕竟:)
https://stackoverflow.com/questions/59201482
复制相似问题