2012-03-08 73 views
1

我的hibernate查询返回null。我在互联网上搜索,但无法找到这个具体问题的答案。下面是该查询:hibernate session get返回null

public T findById(Long id){ 
    return (T) sessionFactory.getCurrentSession().get(getPersistentClass(), id); 
} 

与ID的实体存在于数据库中,但此查询总是返回null,我不知道为什么。下面是生成的查询:

Hibernate: select quiz0_.QUIZ_ID as QUIZ1_3_0_, quiz0_.CATEGORY as CATEGORY3_0_, quiz0_.CREATED_DATE as CREATED3_3_0_, quiz0_.CREATOR_ID as CREATOR4_3_0_, quiz0_.DESCRIPTION as DESCRIPT5_3_0_, quiz0_.IS_IMMEDIATE_CORRECTION as IS6_3_0_, quiz0_.IS_MULTIPAGE as IS7_3_0_, quiz0_.NUM_OF_QUESTIONS as NUM8_3_0_, quiz0_.IS_PRACTICE_MODE as IS9_3_0_, quiz0_.TITLE as TITLE3_0_, quiz0_.IS_RANDOM as IS11_3_0_, quiz0_.RATING as RATING3_0_ from QUIZ quiz0_ where quiz0_.QUIZ_ID=? 

在此先感谢。

+0

您是否通过调试确定“id”有效? – bvulaj 2012-03-08 21:35:26

+0

问题实际上是在调用方法中,它返回null。无论如何。感谢您的回复。 – 2012-03-09 01:48:04

回答

0

如果你的数据库表QUIZ映射到T

尝试T.class代替getPersistentClass()

,或者你可以用你的实体名称更改T.class

+0

T.class不起作用,我想因为T在运行时不可用。看起来getPersistentClass()不是查询中所示的问题。它确实识别了正确的类型。 – 2012-03-08 21:30:57

+0

T.class无效。 – bvulaj 2012-03-08 21:32:27

1

我已经做了以下,以确保该类当这个dao实现被扩展和使用时(不是完整的dao实现),设置为

public abstract class GenericDaoImpl<T, I extends Serializable> implements GenericDao<T, I>{ 
     private Class<T> type; 
     public GenericDaoImpl() { 
      this.type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 
     } 
     public T find(I id) { 
      Assert.notNull(id); 
      return (T) getSessionFactory().getCurrentSession().get(getType(), id); 
     } 
} 
+0

我做了同样的模式,除了我做了而不是。虽然,我没有看到这可能会影响上述查询行,只要将正确的Id传递给sessionFactory.getCurrentSession()。get(getPersistentClass(),id); 。 – 2012-03-08 21:48:06

+0

这很奇怪。 Quiz类是否正确映射?您是否尝试过在任何地方添加调试评论以确保正确的数据通过? – Sebastien 2012-03-09 00:18:35