如何在 JHipster 中添加自定义查询?

How to add a custom query in JHipster?

我正在学习使用 JHipster,但不知道如何使用创建自定义查询。

在我的项目中,我有 Orders table 和 DeliveryDayWeek 字段,并且只想显示一周中当天的订单。 DeliveryDay 和 Week 是 int,值为(1-7 和 0-2)

所以在 OrdersRepository.java 中我添加了这样的自定义查询:

public interface OrdersRepository extends JpaRepository<Orders,Long> {

Page<Orders> findByDeliveryDayAndWeek(int weekday, int week, pageable);

OrdersResource.java 我添加了这个:

    @RequestMapping(value = "/today",
        method = RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE)
    @Timed
    public ResponseEntity<List<Orders>> getOrdersForToday(Pageable pageable)
        throws URISyntaxException {
        log.debug("REST request to get a page of Orderss");
        Page<Orders> page = ordersRepository.findByDeliveryDayAndWeek(1, 0, pageable);
        HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/today");
        return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
    }

我还添加了today.html(复制orders.html)和today.js

'use strict';

angular.module('fruitcrmApp')
    .config(function ($stateProvider) {
        $stateProvider
            .state('today', {
                parent: 'entity',
                url: '/today',
                data: {
                    authorities: ['ROLE_USER'],
                    pageTitle: 'fruitcrmApp.orders.home.title'
                },
                views: {
                    'content@': {
                        templateUrl: 'scripts/app/custom/today.html',
                        controller: 'OrdersController'
                    }
                },
                resolve: {
                    translatePartialLoader: ['$translate', '$translatePartialLoader', function ($translate, $translatePartialLoader) {
                        $translatePartialLoader.addPart('orders');
                        $translatePartialLoader.addPart('global');
                        return $translate.refresh();
                    }]
                }
            })

    });

并在 index.html

中添加 today.js

我的 orders.controller.js 看起来像这样(由 JHipster 生成)

'use strict';

angular.module('fruitcrmApp')
    .controller('OrdersController', function ($scope, $state, Orders, OrdersSearch, ParseLinks) {

        $scope.orderss = [];
        $scope.predicate = 'id';
        $scope.reverse = true;
        $scope.page = 1;
        $scope.loadAll = function() {
            Orders.query({page: $scope.page - 1, size: 20, sort: [$scope.predicate + ',' + ($scope.reverse ? 'asc' : 'desc'), 'id']}, function(result, headers) {
                $scope.links = ParseLinks.parse(headers('link'));
                $scope.totalItems = headers('X-Total-Count');
                $scope.orderss = result;
            });
        };
        $scope.loadPage = function(page) {
            $scope.page = page;
            $scope.loadAll();
        };
        $scope.loadAll();


        $scope.search = function () {
            OrdersSearch.query({query: $scope.searchQuery}, function(result) {
                $scope.orderss = result;
            }, function(response) {
                if(response.status === 404) {
                    $scope.loadAll();
                }
            });
        };

        $scope.refresh = function () {
            $scope.loadAll();
            $scope.clear();
        };

        $scope.clear = function () {
            $scope.orders = {
                details: null,
                orderDate: null,
                firstDelivery: null,
                isActive: false,
                id: null
            };
        };
    });

现在我可以访问 http://localhost:3000/#/today 但它显示了来自 Orders 的所有数据我做错了什么?如何使用我自己的方法 OrdersRepository.java?

我尝试搜索示例,但没有找到任何相关示例。我错过了哪些必要的步骤? Link 对于一些涵盖它的教程,如果答案很长,那将是很好的。

您需要为 today API 端点创建一个新的 angular 服务。像这样的东西,叫做 orders-today.service.js:

'use strict';

angular.module('fruitcrmApp')
    .factory('OrdersToday', function ($resource) {
        return $resource('api/orders/today', {}, {
            'query': { method: 'GET', isArray: true}
        });
    });

然后在您的 orders.controller.js 文件中,您需要注入新的 OrdersToday 服务:

.controller('OrdersController', function ($scope, $state, Orders, OrdersSearch, OrdersToday, ParseLinks) {

当您想获取今天的订单列表时,您需要使用 OrdersToday.query 就像您在粘贴的示例中使用 Orders.query 一样。

您可能希望创建一个引用 OrdersTodayOrdersTodayController,并在 today.js 中使用它而不是 OrdersController