Comment gérez-vous avec le volume de la suppression d'un tableau d'Id dans Spring Data JPA?
Maintenant, j'ai une classe Utilisateur, je reçois une demande de données d'une array
de la jsp
ou html
.
liste de ce Integer[] arr=[5,6,9,10,62,52,21]
puis-je utiliser deux méthodes pour la finition de gonflement de la suppression de l'action.
@Transactional
@Override
public void deleteUser(Integer id) {
oneRepository.delete(id);
}
@Transactional
@Override
public void deleteSomeUser(Integer[] ids) {
for (Integer id : ids) {
deleteUser(id);
}
}
Je veux savoir que si c'est la méthode la plus efficace pour terminer cette action.
vous pouvez voir mes logs:
il ne semble pas si bon!!!
[94, 95, 91, 92, 93]
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
select
count(practice0_.ID) as col_0_0_
from
sshh_user practice0_
OriginalL'auteur JSO | 2016-04-21
Vous devez vous connecter pour publier un commentaire.
Supposons que vous avez un
UserRepository
comme:Ensuite, vous pouvez ajouter une modification de méthode de requête comme suit dans votre
UserRepository
:Enfin, vous pourrez modifier votre suppression en bloc le service, comme suit:
Cela va générer une requête de suppression comme:
Aussi être conscient de Auto Invocation questions lorsque vous appelez un
public
conseillé méthode à partir d'un autre.Notez que cela ne va pas déclencher automatiquement en cascade supprime sur des entités en relation avec le supprimé entités, cf. stackoverflow.com/questions/23443188/...
A noter aussi, qu'il y a de sql dans la clause limit. Par exemple, dans PostgreSQL stackoverflow.com/questions/1009706/...
OriginalL'auteur Ali Dehghani
Il suffit d'ajouter les lignes suivantes à votre utilisateur référentiel d'interface
Printemps va automatiquement générer la requête appropriée via le nom de la méthode de dérivation.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods
EDIT: UN litte plus de détails sur cette
À l'aide de Ressorts Référentiel des interfaces comme
CrudRepository
,JpaRespository
apporte le set de base opérations de base de données, comme create, read, update, delete, la pagination, tri et ainsi de suite.Pour ajouter manuellement des requêtes simples, comme à la recherche d'un nom d'utilisateurs ou une adresse mail de printemps offre une belle mechnanism sans annotation toute chaîne de caractères en fonction des requêtes HQL ou similaire.
Du printemps, les analyses de vos noms de méthode, la recherche de mots-clés. Lisez la documentation en lien ci-dessus les mots clés qui sont fournis.
Exemple des méthodes pour une
CrudRepository<User>
:Iterable<User> findByNameLike(String search)
décide deselect * from user where name like '<search>'
void deleteByIdIn(List<Integer> ids)
décide dedelete from user where id in ([ids])
Juste un mot d'avertissement sur cette solution, en raison d'un bogue dans Eclipselink cela ne fonctionne pas (il génère des requêtes malformées), de sorte que vous avez à revenir à l'ajout d'une requête pour le nom de la méthode si vous utilisez EclipseLink.
Son travail perfectlty avec mise en veille prolongée jusqu'à présent. Un autre (et beaucoup plus souple) est d'utiliser QueryDSL (baeldung.com/rest-api-search-language-spring-data-querydsl)
cela ne fonctionne pas dans la version 2.0.5.La LIBÉRATION. deleteByIdIn génère autant de supprimer des requêtes que le numéro de l'id que vous fournissez.
OriginalL'auteur LazyProphet
Qu'il est de notre cas, nous utilisons HQL de faire ce type de supprimer.Vous pouvez voir ici http://www.java2s.com/Tutorial/Java/0350__Hibernate/HSQLDeleteWithParameter.htm
et peut l'utiliser dans la requête.
OriginalL'auteur Md.Alauddin Hossain