2009-05-24 8 views
3

Excuses s'il s'agit d'un repos, je n'ai pas trouvé les termes de recherche pour trouver une question similaire.Spring + Hibernate Dynamic Mapping

L'application sur laquelle je travaille prend en charge les plugins qui peuvent être chargés ou déchargés à l'exécution. Il existe plusieurs hooks API qui permettent, entre autres, à ces plugins d'enregistrer des objets plus riches que ceux fournis en sortie de boîte. Lorsqu'un plugin est activé et enregistre un nouvel objet domaine, je dois alerter hibernate sur le nouvel objet (et la suppression de cet objet lorsque le plugin est désactivé). Tous nos objets sont balisés avec des annotations JPA/Hibernate.

classe système

@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; 

    ... 
} 

classe de plug-in (qui se trouve dans un fichier JAR classloader)

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

    ... 
} 

crochet point d'entrée du module d'extension API

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

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

Je sais que hybernate supporte la configuration du mapping via certaines API, mais je sais aussi que cela peut avoir de sérieuses répercussions quand il y a des sessions actives. Donc, ma question est: comment puis-je reconfigurer et augmenter la configuration de mappage en cours lorsque Spring gère mes sessions?

+0

question très intéressante – dfa

Répondre

3

Si vous n'avez pas besoin de conserver les données de session antérieures, vous pouvez simplement détruire/recréer votre SessionFactory avec une nouvelle configuration et une nouvelle liste de classes. Changer la configuration d'une session d'usine mi-app semble peu probable pour moi, mais peut-être quelqu'un avec un meilleur Hibernate-Fu peut me prouver le contraire.

Questions connexes