如何使用自定义的类加载器加载 *.hbm.xml 文件中出现的所有类?
如何定位所有上课地点?
对于 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
类的调用。
坏事是 HibernateConfiguration
类的糟糕的面向对象设计。许多方法返回this
,即调用它们的实例,但是在创建子类之后,这些方法返回this
错误的 Java 类型。您必须覆盖所有这些方法,只需调用super.xxx()
并返回this
子类的类型。