2009-06-22 4 views
0

J'ai un modèle d'objet hérité qui a contenu objets et une table conçue pour exprimer les relations entre contenu objets. Cette dernière s'appelle une table content_content_connections, et en plus d'avoir la clé primaire du contenu from et to, elle contient également 3 autres champs. Un champ de type de connexion et des champs d'ID de type de contenu pour le contenu et le contenu. Ainsi, dans le contenu cbjects un type particulier de connexion peut être annotées commeComment utiliser les intercepteurs d'hibernation pour remplir des champs supplémentaires dans une table de jointure?

@ManyToMany(fetch = FetchType.LAZY) 
@JoinTable(name = "content_content_connections", joinColumns = { @JoinColumn(name = "CONTENT_ID1") }, inverseJoinColumns = { @JoinColumn(name = "CONTENT_ID2") }) 
@WhereJoinTable(clause = "connection_type_id=1108") 
getFoos() { ... } 

Actuellement c'est une lecture cartographie seule qui ignore les colonnes supplémentaires, en dehors de la clause where. Si je souhaite changer ceci à un mappage de lecture/écriture, y a-t-il un moyen de le faire sans promouvoir la table de jointure à un type mappé? En d'autres termes, puis-je utiliser les intercepteurs d'hibernation pour, lors de la sauvegarde, remplir les colonnes supplémentaires de la table de jointure qui ne sont pas explicitement mappées?

Répondre

0

Il vaut mieux implémenter un SaveOrUpdateEventListener plutôt qu'un intercepteur.

Assurez-vous d'ajouter le SaveOrUpdateEventListener de cette façon:

private void initSaveOrUpdateEventListenerHook(Configuration config) { 
    List<SaveOrUpdateEventListener> l = new ArrayList<SaveOrUpdateEventListener>(); 
    SaveOrUpdateEventListener[] listeners = 
      config.getEventListeners().getSaveOrUpdateEventListeners(); 
    l.add(new SaveOrUpdateEventListenerHook()); 
    l.addAll(Arrays.asList(listeners)); 
    SaveOrUpdateEventListener[] newListeners = l.toArray(new SaveOrUpdateEventListener[l.size()]); 
    config.getEventListeners().setSaveOrUpdateEventListeners(newListeners); 
} 
Questions connexes