抱歉,如果这是转贴,我找不到找到类似问题的搜索词.
我正在研究的应用程序支持可以在运行时加载或卸载的插件.除了一些其他功能外,还有几个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.在我看来,更改会话工厂中间应用程序的配置似乎不太可能,但是也许拥有更好Hibernate-Fu的人可以证明我错了.