小编Neo*_*oP5的帖子

Spring Hibernate:重新加载实体映射

在Web应用程序上,我们使用Spring 3.2和Hibernate 4.1.1并实现类似插件的体系结构。可以在运行时添加和删除插件。对于每个模块,我们定义了一个单独的类加载器,并在spring上创建了单独的子应用程序上下文。完整的配置使用注释完成,不再为bean提供XML配置。

Spring Hibernate配置类

@Configuration
@EnableTransactionManagement
public class HibernateConfigurationFactory {

@Bean
public JndiObjectFactoryBean dataSource() {
    JndiObjectFactoryBean ds = new JndiObjectFactoryBean();
    ds.setJndiName("java:jboss/datasources/OurOwnDS");
    ds.setResourceRef(true);
    return ds;
}

@Bean
public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
    sessionFactory.setPackagesToScan("com.foo.bar");
    sessionFactory.setDataSource((DataSource) dataSource().getObject());

    Properties hibernateProperties = new Properties();
    hibernateProperties.put("hibernate.hbm2ddl.auto", "update");

    sessionFactory.setHibernateProperties(hibernateProperties);

    return sessionFactory;
}

@Bean
public HibernateTransactionManager transactionManager() {
    HibernateTransactionManager transactionManager = new HibernateTransactionManager();
    transactionManager.setSessionFactory(sessionFactory().getObject());
    return transactionManager;
}

}
Run Code Online (Sandbox Code Playgroud)

现在的问题是:一些插件包含它们自己的实体(+ DAO)类,这些类在运行时随模块一起添加。

是否可以在休眠状态下创建某种单独的上下文(就像我们在春季那样),甚至可以添加/重新加载其他实体类?

重新加载EntityManager是否可以满足我的需求?但是在上下文中已经加载的实体会发生什么?

感谢您的帮助和提前评论。

更新: 其实我做了以下并解决了这个问题(但后来又遇到了另一个问题。)。

我为每个模块/上下文创建一个新的DataSource + SessionFactory + TransactionManager,并将它们插入到新的子ApplicationContext中。现在,我使用类加载器扫描所有带注释的类,并通过使用手动在应用程序上下文和会话工厂上注册它们

LocalSessionFactorybean#setAnnotatedClasses(...)
Run Code Online (Sandbox Code Playgroud)

这个效果很好...但是...

下一个问题: …

java spring hibernate spring-mvc

5
推荐指数
1
解决办法
1983
查看次数

标签 统计

hibernate ×1

java ×1

spring ×1

spring-mvc ×1