org.hibernate.impl.SessionFactoryImpl.getClassMetadata上的NullPointerException

org.hibernate.impl.SessionFactoryImpl.getClassMetadata上的NullPointerException,hibernate,spring,dbunit,hibernate-generic-dao,Hibernate,Spring,Dbunit,Hibernate Generic Dao,我甚至不知道如何表达这个,因为我不确定什么是空的 我有一个hbm.xml文件,配置如下: ` 上述代码的DAO实现是: @Repository("reservationDAO") public class HibernateReservationDAOImpl extends BaseDAOImpl<Entity> implements ReservationDAO { public Reservation getReservation(int reservationId)

我甚至不知道如何表达这个,因为我不确定什么是空的

我有一个hbm.xml文件,配置如下: `

上述代码的DAO实现是:

@Repository("reservationDAO")
public class HibernateReservationDAOImpl extends BaseDAOImpl<Entity> implements ReservationDAO {

public Reservation getReservation(int reservationId) {
    return (Reservation) searchUniqueByPropertyEqual("entityId", reservationId);
}
我正在使用hibernate进行dbunit和spring测试。正在尝试为我的代码设置测试环境

关于配置混乱的地方或者我错过了一些必要的东西,有什么想法吗


谢谢

我想错了

public class HibernateReservationDAOImpl extends BaseDAOImpl<Entity> implements ReservationDAO
公共类HibernateServationDaoImpl扩展BaseDAOImpl实现ReservationDAO
您没有发布ReservationDAO的代码,但我认为它类似于

public interface ReservationDAO extends BaseDAO<Entity> {
}
公共接口保留DAO扩展了BaseDAO{
}
你的情况应该是这样的

public class HibernateReservationDAOImpl extends BaseDAOImpl<Reservation> implements ReservationDAO
公共类HibernateServationDaoImpl扩展BaseDAOImpl实现ReservationDAO

公共接口保留DAO扩展了BaseDAO

昨天刚刚遇到类似的问题,我在测试中使用了类似于您的泛型dao类,并且必须在没有泛型的情况下执行。因此,我认为对于hibernate来说,了解泛型dao在哪个类中工作是很重要的。

将此添加为另一个答案,因为我遇到了完全相同的错误stacktrace。但我的问题不同,我的实体类不在上下文文件中属性“packagesToScan”下指定的包中。确保您的实体类位于在下面属性下指定的包中

<property name="dataSource" ref="intDataSource" />
     <property name="packagesToScan">
     <array>
          <value>com.mycompany.bus.server.dao</value>
          <value>com.mycompany.bus.client.dao</value>
     </array>
 </property>  

com.mycompany.bus.server.dao
com.mycompany.bus.client.dao
位于org.hibernate.internal.SessionFactoryImpl.locate EntityPersister(SessionFactoryImpl.java:783)

当您的
类型
在以下位置为
null
时可能发生:

private Class<T> type;

entityManager.find(type, entityId);
因为您没有在DAOImpl中指定类型。DAOImpl类中的构造函数可以解决这个问题:

public ExampleClassDAOImpl() {
    super(ExampleClass.class);
}

@斯卡夫曼。我正在使用hibernate 3.2.5.ga。仅供参考,我使用的是hibernate通用dao 0.5.1。希望这个帮助我在父对象中搜索字符串集合时也遇到了这个问题。我很失望没有找到解决办法。很抱歉我帮不了忙。实际上,我不得不删除整个配置并重新开始。对不起,这似乎是正确的答案。这件事发生在一年多以前,我现在无法访问它,但你的答案与我当时的做法是一致的(如果我没有阅读你的答案,我会再次这样做)。
public interface ReservationDAO extends BaseDAO<Entity> {
}
public class HibernateReservationDAOImpl extends BaseDAOImpl<Reservation> implements ReservationDAO
public interface ReservationDAO extends BaseDAO<Reservation> 
<property name="dataSource" ref="intDataSource" />
     <property name="packagesToScan">
     <array>
          <value>com.mycompany.bus.server.dao</value>
          <value>com.mycompany.bus.client.dao</value>
     </array>
 </property>  
private Class<T> type;

entityManager.find(type, entityId);
session.createCriteria(type);
public ExampleClassDAOImpl() {
    super(ExampleClass.class);
}