Spring + Hibernate动态映射
问题描述:
道歉,如果这是一个转发,我找不到搜索条件来查找类似的问题。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如何管理我的会话时,如何重新配置和扩充当前的映射配置“在飞行中”。
答
如果您不需要保留之前的会话数据,您可以使用新的配置和新的类别列表销毁/重新创建SessionFactory。更改会话工厂mid-app的配置对我来说似乎不太可能,但也许有更好的Hibernate-Fu的人可以证明我是错误的。
非常有趣的问题 – dfa 2009-05-24 18:48:38