2017-07-03 61 views
0

对不起,如果这是一个糟糕的问题,但我想知道POJO是否可以让getter返回JPQL查询结果? 在构造函数中进行赋值是否更好?返回JPQL查询结果的POJO getter?

public Long getCount() { 
Long count = 0L; 
    if (date != null) { 
     count = (Long) entityManager.createNamedQuery(query) 
       .setParameter(1, someCriteria.getId()) 
       .setParameter(2, someDate) 
       .getSingleResult(); 
    } else { 
     count = (Long) entityManager.createNamedQuery(query) 
       .setParameter(1, someCriteria.getId()) 
       .getSingleResult(); 
    } 
    return count; 
} 
+2

我认为在你的模型中有依赖关系的存储库/服务通常是一个糟糕的设计。 –

回答

0

不,总的来说,我个人认为采用getters方法进行复杂操作并不是一个错误的做法。这与信息隐藏和复杂隐藏有关。调用者只是调用“getThat()”,操作背后的复杂性完全隐藏给调用者。

不同的考虑因素是性能和效率。如果由getter执行的操作昂贵,则应该考虑一些优化策略。根据具体情况,您可以将结果存储在本地变量,本地数据库中,或者应用其他类型的策略,以避免每次调用getter时重新计算结果。全部取决于结果的含义,结果的变化速度以及应用程序获取最新值的重要性。

+0

我并不清楚POJO的确切定义。但我期望一个名为POJO的对象(取决于上下文)是一个简单的业务对象。我期望在这样一个对象中的getter可以返回其实例变量(或其派生的)中可用的值,但不会执行对持久层的调用。我将这段代码放入数据访问对象的finder方法中,以避免让另一个开发人员感到意外(我认为这是一种代码味道)。 – sruetti