2008-12-29 9 views
1

Existe-t-il un moyen élégant de mapper un objet de base de données par défaut dans Hibernate? Par exemple, dans cette classe, un Foo devrait toujours être capable de retourner une barre, qu'elle soit personnalisée pour le Foo, ou qu'elle provienne d'une valeur par défaut qui est stockée quelque part dans la base de données. Les utilisateurs de Foo devraient être en mesure de définir un objet Bar personnalisé, mais ils n'ont pas besoin d'un accès en écriture à Bar - d'où une visibilité réduite. :hibernate - modèle pour mapper une entité par défaut?

public Class Foo { 
    public Bar Bar { 
     get { 
      return CustomBar ?? DefaultBar; 
     } 
    } 

    public Bar CustomBar { get; set; } 
    protected Bar DefaultBar { get; private set; } 
} 

La question que je me pose est de savoir comment hiberner la carte de cette propriété DefaultFoo. Toutes les classes Bar devraient pouvoir accéder à cet objet DefaultFoo unique. La seule façon dont je sais comment faire cela dans Hibernate est avec un mappage un-à-plusieurs dans Foo. (Foo contenant un à plusieurs Bars) ... ça a l'air un peu kludgy, puisqu'il y a toujours au plus un Bar. Y a-t-il un meilleur modèle pour ce type de comportement? TIA.

Répondre

0

Ceci est également appelé le modèle NullObject ou DefaultObject. Il y a eu une discussion sur les listes de diffusion Hibernate à ce sujet. Mais je n'ai rien vu sur la manière de le stocker dans la base de données. Si vous voulez un vrai NullObject, externe à la base de données, alors vous pouvez implémenter un objet par défaut Singleton et implémenter l'interface ILifecycle (je pense) et veto l'événement OnSave pour l'empêcher d'être persisté.

Questions connexes