diff --git a/src/main/java/de/varilx/database/mongo/repository/MongoRepository.java b/src/main/java/de/varilx/database/mongo/repository/MongoRepository.java index 63ad4df..d43faab 100644 --- a/src/main/java/de/varilx/database/mongo/repository/MongoRepository.java +++ b/src/main/java/de/varilx/database/mongo/repository/MongoRepository.java @@ -114,6 +114,22 @@ public CompletableFuture findByFieldNames(Map values) { }); } + @Override + public CompletableFuture> findManyByFieldName(String name, Object value) { + return this.findManyByFieldNames(Map.of(name, value)); + } + + @Override + public CompletableFuture> findManyByFieldNames(Map values) { + return CompletableFuture.supplyAsync(() -> { + Bson filter = Filters.empty(); + for (Map.Entry entry : values.entrySet()) { + filter = Filters.and(filter, Filters.eq(entry.getKey(), entry.getValue())); + } + return database.find(filter).into(new ArrayList<>()); + }); + } + private ID getId(E entity) { return ReflectionUtils.getId(entity, idClass); } diff --git a/src/main/java/de/varilx/database/repository/Repository.java b/src/main/java/de/varilx/database/repository/Repository.java index f5e7043..6908726 100644 --- a/src/main/java/de/varilx/database/repository/Repository.java +++ b/src/main/java/de/varilx/database/repository/Repository.java @@ -28,4 +28,8 @@ public interface Repository { CompletableFuture findByFieldNames(Map values); + CompletableFuture> findManyByFieldName(String name, Object value); + + CompletableFuture> findManyByFieldNames(Map values); + } diff --git a/src/main/java/de/varilx/database/sql/repository/SQLRepository.java b/src/main/java/de/varilx/database/sql/repository/SQLRepository.java index 3da4612..42b9e91 100644 --- a/src/main/java/de/varilx/database/sql/repository/SQLRepository.java +++ b/src/main/java/de/varilx/database/sql/repository/SQLRepository.java @@ -145,9 +145,7 @@ public CompletableFuture findByFieldNames(Map entries) { session.beginTransaction(); String hql = "FROM " + entityClass.getName() + (entries.size() > 0 ? " WHERE " : ""); - hql += entries.entrySet().stream().map(entry -> { - return entry.getKey() + " = :" +entry.getKey(); - }).collect(Collectors.joining(" AND ")); + hql += entries.keySet().stream().map(object -> object + " = :" + object).collect(Collectors.joining(" AND ")); Query query = session.createQuery(hql, entityClass); @@ -163,4 +161,33 @@ public CompletableFuture findByFieldNames(Map entries) { } }); } + + @Override + public CompletableFuture> findManyByFieldName(String name, Object value) { + return this.findManyByFieldNames(Map.of(name, value)); + } + + @Override + public CompletableFuture> findManyByFieldNames(Map entries) { + return CompletableFuture.supplyAsync(() -> { + try (Session session = this.sessionFactory.openSession()) { + session.beginTransaction(); + String hql = "FROM " + entityClass.getName() + (entries.size() > 0 ? " WHERE " : ""); + + hql += entries.keySet().stream().map(object -> object + " = :" + object).collect(Collectors.joining(" AND ")); + + + Query query = session.createQuery(hql, entityClass); + + for (int i = 0; i < entries.size(); i++) { + query.setParameter(entries.keySet().stream().toList().get(i), entries.values().stream().toList().get(i)); + } + + List result = query + .getResultList(); + session.getTransaction().commit(); + return result; + } + }); + } }