2009-05-24 152 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的人可以證明我是錯誤的。