我正在处理一些继承的代码,我不习惯实体框架工作。我试图弄清楚为什么以前的程序员按照他们的方式对事物进行编码,有时混合和匹配不同的查询数据的方式。
Deal d = _em.find(Deal.class, dealid);
List<DealOptions> dos = d.getDealOptions();
for(DealOptions o : dos) {
if(o.price == "100") {
//found the 1 item i wanted
}
}
然后有时候我会看到这个:
Query q = _em.createQuery("select count(o.id) from DealOptions o where o.price = 100 and o.deal.dealid = :dealid");
//set parameters, get results then check result and do whatver
我理解这两段代码的作用,我理解,给定一个大型数据集,第二种方式更有效。但是,只给出一些记录,是否有任何理由不进行查询,只是让实体进行连接并循环记录集?
答案 0 :(得分:2)
无论记录数量多少,都不会使用第一种方法:
更详细
意图不太明确,因为杂乱无章
表现更差,可能会因为第一批实体而开始降级
对于每个添加的实体,第一种方法的性能会比使用第二种方法的性能降低更多
这是出乎意料的 - 大多数有经验的开发人员都不会这样做 - 因此需要更多的认知工作才能让其他开发人员理解。他们会认为你是出于某种令人信服的理由而这样做的,并且会在没有找到原因的情况下寻找原因。