0

如何使用自定义的类加载器加载 *.hbm.xml 文件中出现的所有类?

如何定位所有上课地点?

4

1 回答 1

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类的调用。

坏事是 HibernateConfiguration类的糟糕的面向对象设计。许多方法返回this,即调用它们的实例,但是在创建子类之后,这些方法返回this错误的 Java 类型。您必须覆盖所有这些方法,只需调用super.xxx()并返回this子类的类型。

于 2013-04-17T08:56:38.507 回答