2008-12-04 6 views
1

Dans de nombreux projets précédents, j'ai utilisé l'approche JPA/Hibernate this pour ajouter des fonctionnalités d'audit à un système. C'est très efficace et discret.MappedSuperclass Alternatives dans Grails

Existe-t-il une alternative Grails @MappedSuperclass (à court d'objets de modèle de domaine de codage dans Java au lieu de Groovy)? Comment peut-on déclarer une classe parente dans une approche table par sous-classe sans avoir créé de table pour cela? J'ai lu la documentation de GORM (5.2.3 Inheritance in GORM) mais en plus de la discussion table-par-hiérarchie vs table-par-sous-classe, je n'ai trouvé aucun détail sur la façon de procéder.

Sinon, quelle est la méthode recommandée pour réaliser ce type d'audit dans Grails?

+1

Oui, pour une raison quelconque, cela fonctionne dans Grails 2 plus la classe Abstract obtient sa propre définition de table? J'ai demandé sur le forum Grails, mais personne ne semble savoir pourquoi cela a été changé. Quelqu'un sait pourquoi ou connaît une solution de contournement ou un paramètre? –

Répondre

4

OK, a fait un peu plus la recherche et je répondu à ma propre question :)

Essentiellement, il est aussi simple que de déclarer la MappedSuperclass comme abstraite et Grails ne crée pas une table pour elle. J'ai réalisé par re-reading the manual (RTFM fondamentalement ... fonctionne à merveille): "GORM soutient l'héritage à la fois des classes de base abstraites et des entités concrètes GORM persistantes." C'est à dire. les classes concrètes sont persistantes, donc les abstraites ne le sont pas. Pays à lire plus attentivement.

E.g. Seule la table livre

abstract class Auditable { 
    Date dateCreated 
    Date lastUpdated 
} 

class Book extends Auditable { 
    String title 
    String description 
} 

sera créé et aura le

date_created

et

LAST_UPDATED

colonnes. De plus, en bonus, les propriétés dateCreated et lastUpdated sont auto time-stamped de Grails.

Espérons que cela aide les autres.

+4

Cette implémentation ne fonctionne malheureusement pas avec Grails 2.0 :( –

+0

@HussainFakhruddin vous voulez dire 2.x droit? Nous utilisons 2.5.4 – svaret