休眠 5 和 JPA 并动态设置实体类加载器

hibernate 5 and JPA and setting entity classloader dynamically

我有一个 Web 应用程序使用带有 'CompilingClassLoader' 的库,当它重新加载时(因为有人编辑了代码),每次都会创建一个新的类加载器。发生这种情况时,将执行我正在编写的休眠插件中的以下代码

@Singleton
@Provides
public EntityManagerFactory providesSessionFactory() throws IOException {
    log.info("Loading Hibernate.  ENTITY classloader="+entityClassLoader+" hibernate classloader="+this.getClass().getClassLoader());
    Map<String, Object> properties = new HashMap<>();
    properties.put("hibernate.classLoader.application", entityClassLoader);
    EntityManagerFactory factory = Persistence.createEntityManagerFactory(persistenceUnit, properties );
    log.info("Done loading Hibernate");
    return factory;
}

出现这个问题是因为我认为 "hibernate.classLoader.application" 必须改为在 persistence.xml 中定义(这违背了我需要的目的,因为每次开发人员更改代码时都会发生这种情况)。

基本上,我们有一个开发模式,其中 CompilingClassLoader 不断变化(它也非常快,所以效果很好)但我现在不知道如何在休眠状态下执行此操作。有没有办法通过 Thread.current.setContextClassLoader() 中的某些 ThreadLocal 或以某种方式设置它。

谢谢, 院长

这最终成功了

    Collection<ClassLoader> classLoaders = new ArrayList<>();
    classLoaders.add(entityClassLoader);
    Map<String, Object> properties = new HashMap<>();
    properties.put(AvailableSettings.CLASSLOADERS, classLoaders);

    EntityManagerFactory factory = Persistence.createEntityManagerFactory(persistenceUnit, properties );