J'ai une table avec 11 colonnes, mais je n'ai besoin que de 2 colonnes dans mon application, j'utilise la combinaison spring/hibernate/DAO. Pour l'instant j'ai une classe de domaine qui inclut tous les 11 champs, et un fichier de mappage qui mappe toutes les 11 colonnes dans la table. Comment est-ce que j'utilise obtenir seulement 2 d'entre eux pas tous?Obtenir moins de colonnes avec hibernation
Répondre
Soit:
Utilisez des projections - Pro: rien à ajouter - Con: Non Typesafe (le résultat est une
List
de lignes où chaque ligne est unObject[])
:select f.foo, f.bar from FatEntity f
Utilisation une expression constructeur dans la clause SELECT (la classe spécifiée n'est pas requise pour être une entité ou pour être mappée à la base de données) - Pro: solution typeafe - Con: Plus de classes, sauf si vous réutilisez
FatEntity
comme détenteur, auquel cas de nombreux domaines serontnull
:select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f
Notez que si une clause dans la
SELECT NEW
, les instances de l'entité résultant nom de la classe d'entité est spécifiée sont dans le nouvel état (pas d'identité persistante).Utilisez une autre entité mappée sur la même table avec uniquement les champs requis - Pro: C'est une entité réelle que vous pouvez modifier et mettre à jour - Con: Plus de classes.
from LightEntity
Les principales différences entre # 2 et # 3 sont:
2 ne nécessite pas le titulaire d'être une entité du tout.
- le détenteur dans # 2 pourrait être une entité mappée sur une autre table.
- si # 2 renvoie des entités, elles sont dans un nouvel état (cela peut être un problème ou non).
Essayez:
SELECT myEntity.one, myEntity.two FROM MyEntity myEntity
Vous pouvez même faire:
SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity
pour obtenir une liste des descriptions des entités.
Si vous n'avez jamais besoin de plus que ces 2 colonnes de la table, vous pouvez modifier votre mappage d'hibernation pour mapper uniquement les 2 colonnes nécessaires à la classe d'entité. Ne mappez que les colonnes de table auxquelles vous souhaitez accéder dans votre application. Gardez à l'esprit que les contraintes de base de données sur les colonnes "ignorées" peuvent être violées comme des contraintes non nulles, des clés étrangères ou des contraintes uniques.
qu'en est-il de la classe de domaine dois-je aussi avoir 2 champs? –
@Pascal Thivent ne puis-je pas laisser 2 champs dans ma classe de domaine et mon fichier de mapping? –
@Gandalf Eh bien, je pensais que quelqu'un utilisait les autres champs. Si ce n'est pas vrai, vous pouvez en effet changer votre entité actuelle. –
Merci pour les solutions multiples, et les explications, comment en arrivez-vous de toute façon? expirience? lire des livres, s'entraîner? Je vais accepter votre réponse.Si vous pouviez me diriger vers la bonne direction, ce serait formidable, comme: sites Web, exemples, livres. –