【发布时间】:2010-11-26 20:57:56
【问题描述】:
与我们现有的相比,使用命名查询有什么优势吗?查看性能、可用性、可维护性等......
在我们的应用程序中,我们这样定义查询:
private static final String SELECT_CODE_FOR_STORE = "select DISTINCT code from Code code "
+ "join code.codeDescriptions codeDesc "
+ "join codeDesc.stores store where store.id =:"
+ DataAccessConstants.PARAM_STORE_ID;
(这些都是放在DAO对象里面的,还有很多。)
我们通过以下方式调用上述内容:
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("storeId", codeDescriptionSearchCriteria.getStoreId());
List<Code> list = getJpaTemplate().findByNamedParams(
SELECT_CODE_FOR_STORE, paramMap);
return list;
那仅此而已:
public List findByNamedParams(final String arg0,
final Map<String,
? extends Object> arg1) throws DataAccessException
{
return org.springframework.orm.jpa.JpaTemplate.findByNamedParams(arg0, arg1);
}
与使用相比
@NamedQuery(name="SELECT_CODE_FOR_STORE", query="select ......")
我们的 DAO 对象的顶部。
我看到this posting 似乎是组织所有这些查询的好方法。或者,如果我们有这么多此类查询,也许是时候重新评估我们的数据库和对象结构了。
【问题讨论】:
-
IMO 更好的答案在这里:stackoverflow.com/a/7770977/891479
标签: java performance hibernate annotations