2

我正在尝试使用hibernate编写一个网站来访问数据库。保存我可以正常工作,但是当我尝试在执行 session.createQuery 调用时调用我的 getList 方法时,代码只是进入 finally 方法而不会引发异常,让我有点困惑!

代码如下:

public List<Category> getCategories() {
    //insertCategory();
    System.out.println("in get categories");
    List<Category> result = null;
    Session session = HibernateUtil.getSessionfactory().openSession();
    Transaction transaction = null;
    try {
        transaction = session.beginTransaction();
        Query cats = session.createQuery("from category where is_parent = 1");
        result = cats.list();
        transaction.commit();
        for (java.util.Iterator<Category> it = result.iterator();it.hasNext();){
            Category myCategory = it.next();
            System.out.println(myCategory);
        }
        calculateBlueprintSize(result.size());
    } catch (HibernateException e) {
        // TODO: handle exception
        transaction.rollback();
        e.printStackTrace();
    } catch (Exception ee) {
        ee.printStackTrace();
    } finally {
        session.close();
    }
    return result;
}

我的插入工作正常(现在硬编码只是为了证明我可以连接到数据库)

public void insertCategory() {
    Category newCat = new Category();
    newCat.setActive(new Integer(1));
    newCat.setCategoryDescription("my test category");
    newCat.setCategoryName("my cat name");
    newCat.setLastUpdatedDate(new Timestamp(new Date().getTime()));
    newCat.setParent(new Integer(1));
    newCat.setSequence(new Integer(1));
    Session session = HibernateUtil.getSessionfactory().getCurrentSession();
    try {
        session.beginTransaction();

        // user.setUserId(new Long(2));
        session.save(newCat);
        session.getTransaction().commit();
    } finally {
        session.close();
    }

}

这是基于访问 MySQL 数据库。

任何帮助将不胜感激,我找不到任何可以帮助我的东西,而且我是 Hibernate 的新手,所以开始考虑使用带有 ehcache 的本机 sql 切换回 DAO 模式可能是最好的选择......

谢谢

马特

4

1 回答 1

2

我相信您RuntimeExceptioncreateQuery电话中得到了一个,因为您将 SQL 名称与 HQL 名称混合在一起。我假设您的表已命名category,并且该 is_parent列是该表中的一个字段。如果要使用 HQL 查询,则需要使用Category实体上的属性名称,即parent,而不是is_parent

于 2012-04-11T21:01:39.307 回答