如何使用自定义的类加载器加载* .hbm.xml文件中出现的所有类?
如何找到课程发生的所有地方?
答案 0 :(得分:0)
对于Hibernate 3.6(我不知道它是否为Hibernate 4.x而改变):
您可以做什么:使用您自己的子类扩展类org.hibernate.cfg.Configuration
。在这个类中,您可以覆盖方法doConfigure()
和buildSessionFactory()
以注入您自己的自定义类加载器:
@Override
protected Configuration doConfigure(org.dom4j.Document doc) throws HibernateException {
Thread me = Thread.currentThread();
ClassLoader stdLoader = me.getContextClassLoader();
me.setContextClassLoader(new MyOwnClassloader(...));
super.doConfigure(doc);
me.setContextClassLoader(stdLoader);
return this;
}
与buildSessionFactory()
相同。
如果您愿意,也可以覆盖addResource()
。这允许您接受类加载器的特殊语法,在何处查找映射文件或带注释的类。 (当我进行OSGi集成时,我这样做。在映射文件名中,我允许OSGi包的规范在哪里找到映射文件。)
在您的代码中,您必须使用对类的调用替换对休眠Configuration
类的调用。
糟糕的是Hibernate Configuration
类的面向对象设计不佳。许多方法返回this
,i。即它们被调用的实例,但在创建子类后,这些方法返回错误Java类型的this
。您必须覆盖所有这些方法,只需调用super.xxx()
并在子类的类型中返回this
。