【问题标题】:Hibernate query don't retrieving data from database休眠查询不从数据库中检索数据
【发布时间】:2014-08-08 14:24:51
【问题描述】:

在我的 spring 项目中,我的 Dao 类中有这个方法来返回一个表中所有行的列表:

@SuppressWarnings("unchecked")
@Transactional
public List<E> findAll() {
    try {
        List<E> instance = sessionFactory.getCurrentSession().createCriteria(entity.getClass()).list();
        System.out.println("returned instance with "+instance.size()+" items");
        return instance;
    } catch (RuntimeException re) {
        System.out.println("returned null");
        return null;
    }
}

这个方法是从我的服务类的这个方法中调用的:

@PreAuthorize("hasPermission(#user, 'listagem_'+#this.this.name)")
@Transactional
public List<E> listagem() {
    return dao.findAll();
}

最后一个是从我的控制器通过这个方法调用的:

@RequestMapping(value="listagem/{pagina}/{items}/{ordem}")
@PreAuthorize("hasPermission(#user, 'listagem_'+#this.this.name)")
public ModelAndView listagem(@PathVariable("pagina") String pagina, @PathVariable("items") String items, @PathVariable("ordem") String ordem) {
    ModelAndView mav = new ModelAndView();
    mav.setViewName("privado/"+this.getName()+"/listagem");

    mav.addObject("lista", serv.listagem());
    mav.addObject("pagina", pagina);
    mav.addObject("items", items);
    mav.addObject("ordem", ordem);

    return mav;
}

@RequestMapping(value="listagem.json", method=RequestMethod.GET)
@PreAuthorize("hasPermission(#user, 'listagem_'+#this.this.name)")
public ModelAndView listagem_json(@RequestParam("pagina") String pagina, @RequestParam("items") String items, @RequestParam("ordem") String ordem) {
    ModelAndView mav = new ModelAndView();
    mav.setViewName(this.getName()+"/listagem");

    mav.addObject("lista", serv.listagem());
    mav.addObject("pagina", pagina);
    mav.addObject("items", items);
    mav.addObject("ordem", ordem);

    return mav;
}

问题是 Dao 类的 findAll 方法返回零个元素,尽管我确保数据库中的表至少填充了一行。

任何人都可以看到这里有什么问题吗?我在其他项目中使用了相同的代码,并且没有任何问题。这个当前的项目是我第一次使用这个通用的 Dao 类和通用的控制器和服务类。

【问题讨论】:

    标签: java spring hibernate


    【解决方案1】:

    如何尝试setResultTransformer();

    List<E> instance = sessionFactory.getCurrentSession().createCriteria(entity.getClass())
                        .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
    

    【讨论】:

    • 我尝试过,但仍然遇到同样的问题(没有检索到行)。
    • 请您在entity.getClass()上显示整个通用dao代码作为疑问。
    • 是的,这是泛型类的完整代码:github.com/klebermo/blog.cms/blob/master/src/main/java/com/…
    • @KleberMota Suspect on Dao(Class&lt;?&gt; classe)。查看这个thread Generic DAO 类的答案。如果仍然有问题,可能需要检查服务和底层 DAO 创建。
    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多