web-dev-qa-db-fra.com

Type d'extraction par défaut JPA

De ma compréhension @OneToOne et @ManyToOne JPA Annotations Faites un eager fetch. Je veux que ceux-ci soient chargés paresseusement dans mon application ou au moins un indice à ce sujet (ce qui est ce que l'hibernate par défaut). J'ai commencé à ajouter l'annotation fetch = FetchType.LAZY

par exemple

@ManyToOne(optional = false, fetch = FetchType.LAZY)

à la place de

@ManyToOne(optional = false)

Ceci est à la fois fastidieux et sujet aux erreurs. Y a-t-il une façon de le faire à un niveau d'application? Dans la persistance.xml peut-être?

20
RNJ

À ce jour, j'ai choisi d'avoir Hibernate Suivre la spécification JPA en termes de mappage via des annotations simplement parce que je n'ai reçu aucune demande de fonctionnalité de la rendre configurable, ce qui était surprenant TBH. Comme vous le soulignez, car Hibernate 3.0 ce que vous voulez, a été la configuration par défaut lorsque vous utilisez hbm.xml Mappage de fichiers.

Autoriser cela via la configuration ne serait pas violer la spécification comme une autre réponse suggérée.

Tellement longue histoire courte, non, ce n'est pas possible aujourd'hui. Créez une demande de fonctionnalité Si vous souhaitez voir que vous pouvez être configurable.

19
Steve Ebersole

certainement pas. Il n'y a rien à propos de la modification de la stratégie de récupération globale dans la spécification JPA. Les offres JPA pour les associations 1-1/N-1 avaient l'accélération désireuse, tandis que pour 1-N/M-N, il est paresseux. Toutes les implémentations de la JPA devraient suivre les spécifications pour être conformes. Je pense qu'il est préférable que le développeur d'applications ne puisse pas changer ce type de valeur par défaut globalement, car ce sont les meilleures pratiques dans presque la plupart des cas, à moins que vous n'ayez qu'un seul type d'association entre toutes les entités, comme 1-1. Pensez à ce que vous puissiez la définir sur "désireux" dans une application, qui contient un modèle d'entité très riche avec des relations complexes et des millions de données dans la base de données. Remplacer manuellement la stratégie de récupération par association permet au développeur de prendre la responsabilité sur ce qui se produira ensuite. Ce n'est pas sujette d'erreur, à la place, une caractéristique puissante.

3
Erhan Bagdemir

De ma compréhension @Enetoone et @manytoone JPA Annotations font un fèches désireux.

JPA garantit une chargement désireuse sur les relations à la seule valeur, sinon déclarées autrement déclarées par annotation ou dans la persistance XML. Pour les relations de prédilection de la collecte, il est par défaut de chargement paresseux, mais le chargement paresseux est (juste) un indice du fournisseur de persistance prenant en charge JPA, de sorte que vous ne pouvez pas compter sur celui-ci et avoir à vérifier le fournisseur spécifique (par exemple hibernate, openJPA). Voir ce lien comme référence, et pour plus de perspicacité.

1
Felix Dobslaw