2009-05-24 150 views
3

道歉,如果这是一个转发,我找不到搜索条件来查找类似的问题。Spring + Hibernate动态映射

我工作的应用程序支持可以在运行时加载或卸载的插件。有几个API挂钩可以允许这些插件注册更丰富的对象,然后提供开箱即用的对象。当一个插件被激活并注册一个新的域对象时,我需要提醒休眠到新对象(并且在插件被停用时移除该对象)。我们所有的对象都使用JPA/Hibernate注释来标记。

系统类

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING) 
@DiscriminatorValue("CORE") 
public class User { 
    protected @Id @GeneratedValue int id; 
    protected String userName; 

    ... 
} 

插件类(在JAR类加载器发现)

@Entity 
@DiscriminatorValue("LDAP_USER") 
public class LdapUser extends User { 
    protected boolean active; 

    ... 
} 

插件入口点API钩子

public void activate() { 
    UserManager.getInstance().registerType(LdapUser.class); 
} 

public void deactivate() { 
    UserManager.getInstance().unregisterType(LdapUser.class); 
} 

我知道hybernate支持通过一些API配置映射,但是我也知道这会在有活动会话时产生一些严重影响。

所以我的问题是:Spring如何管理我的会话时,如何重新配置​​和扩充当前的映射配置“在飞行中”。

+0

非常有趣的问题 – dfa 2009-05-24 18:48:38

回答

3

如果您不需要保留之前的会话数据,您可以使用新的配置和新的类别列表销毁/重新创建SessionFactory。更改会话工厂mid-app的配置对我来说似乎不太可能,但也许有更好的Hibernate-Fu的人可以证明我是错误的。