Я хочу применить функцию Max () к базе данных, используя seedstack с хранилищем - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь получить максимальное значение столбца с плавающей запятой, используя код SeedStack Java, где я использую репозиторий seedstack. Но я не могу понять, как это сделать. В качестве хранилища не следует использовать функцию max. он имеет единственную функцию подсчета. Я применил фильтры, используя спецификацию. Но застрял с функцией Макса. кто-нибудь может помочь?

Не могу поделиться кодом из-за ограничений.

1 Ответ

0 голосов
/ 13 марта 2020

Абстракция репозитория позволяет вам управлять сохранением агрегата с помощью фасада, похожего на коллекцию, но обобщенные методы c могут возвращать только объекты типа агрегата.

При выполнении агрегирования данных, как в вашем случае, вы возвращаете не агрегат, а отдельные столбцы и результаты агрегации. Это несовместимо с обобщенными c репозиториями методами и спецификациями объектов.

Чтобы достичь того, что вы хотите, вы должны определить собственный метод репозитория. Определите его в пользовательском интерфейсе:

public interface ProductRepository extends Repository<Product, Long> {
    int getMaximumProductPrice();
}

Затем реализуйте его:

public class ProductJpaRepository 
        extends BaseJpaRepository<Product, Long> 
        implements ProductRepository {

    @Override
    public int getMaximumProductPrice() {
        // implement query using getEntityManager()
    }
}

Теперь вы напрямую добавляете в свой репозиторий собственный интерфейс:

public class SomeClass {
    @Inject
    private SomeRepository someRepository;
}

Приведенный выше пример очень прост, но обратите внимание, что вы также можете возвращать более сложные значения, такие как:

  • Массив Object для хранения произвольных значений,
  • Пользовательский объект, предназначенный для хранения всех возвращаемые значения,
  • A Product или список Product, если вы выполняете объединение.
...