Question

Ce qui suit est une hiérarchie de type annoté JPA, dans lequel tous les champs de données (et getters associés et setters) sont membres du supertype ainsi que des méthodes abstraites pour la mise en œuvre la logique métier. Il y a un certain nombre de sous-types qui mettent en œuvre ces méthodes abstraites sans l'ajout de membres de données, nous utilisons donc la stratégie d'héritage de table unique, de sorte que nous avons besoin qu'une seule table dans la base de données à cette hiérarchie de type.

Je l'ai fait de cette façon parce que, sur la base du contenu des données, il y a des comportements différents qui doivent être mises en œuvre pour atteindre un objectif ultime.

@Entity
@Table
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
public abstract class SuperEntity {
  // Several fields and getters and setters
  ...
  // Abstract method declarations for business logic
  ...
}

@Entity
@DiscriminatorValue("some value")
public class SomeSubtype extends SuperEntity {
  // Implementations of abstract methods
  ...
}

Est-ce une perversion du concept de colonne discriminante dans JPA / Hibernate?

Un collègue fait valoir que puisque la structure des données ne varie pas de sous-types de sous-type les méthodes abstraites et implémentations correspondantes devraient être déplacées dans quelque chose comme une approche de modèle de stratégie. mieux est son idée?

Était-ce utile?

La solution

Mieux est extrêmement subjective. On dirait que la composition et les stratégies sont une alternative valable, et qui pourrait vous empêcher d'avoir besoin de carte une autre entité pour chaque mise en œuvre de la logique métier.

JPA et mise en veille prolongée à part, tous les livres de la conception OO que j'ai jamais lu commence par « composition faveur de l'héritage » pour le comportement de partage.

Supposons que vous aviez un objet de données, ne pourriez-vous partager l'objet entre chaque stratégie de non-mise en veille prolongée et fonctionner à ce sujet? Ayant moins JPA / mise en veille prolongée est plus facile sur les yeux, en tout cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top