Как суммировать стоимость каждого элемента в JPA отношения "один ко многим"? - PullRequest
1 голос
/ 06 августа 2020

Как я могу рассчитать общую сумму заказа в отношении «один ко многим», когда клиент покупает определенное количество товаров в атрибуте заказа, он хочет знать, он может начать расследование, чтобы выполнить это. Я правда немного запуталась, очень хочу выучить

@Entity
@Table(name = "orders")
class Order(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        val id: Int? = 0,

  
        val name: String? = "",
        val address: String? = "",
        val phone: String? = "",
        
        val totalOrderPrice: Long? // total based on the cost of each item


        @OneToMany(cascade = [CascadeType.MERGE])
        @JoinColumn(name = "order_id")
        val items: List<Items>? = mutableListOf()
)
@Entity
@Table(name = "items")
class Items(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        val id: Long? = null,
        val name: String? = null,

        val price: Long?, // cost item

    )

1 Ответ

1 голос
/ 12 августа 2020

Сначала вам нужно исправить ваше отображение. В дочерней сущности у вас должна быть ссылка на родительскую сущность. Это означает, что в классе «Items» добавьте ссылку на идентификатор заказа в столбце «orderId». Тогда ваш класс должен выглядеть так

@Entity
@Table(name = "items")
class Items(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        val id: Long? = null,
        val orderId: int? = null,
        val name: String? = null,

        val price: Long?, // cost item
    )

Теперь у вас есть 3 варианта расчета общей стоимости заказа

  1. Напишите запрос JPA следующим образом

    @ Query ("ВЫБРАТЬ СУММУ (m.price) FROM Items m, где orderId =: orderId")

    Long getOrderPrice (@Param ("orderId") Long orderId);

  2. Написать собственный SQL запрос, подобный этому

    @ Query ("ВЫБРАТЬ СУММУ (цена) ИЗ элементов, где order_id =: orderId ", nativeQuery = true)

    Long getOrderPrice (@Param (" orderId ") Long orderId);

  3. In Java используя потоки или для l oop рассчитать общую стоимость

    Long sum = order.getItems.map (i-> i.getprice ()). Stream (). Reduce (Long :: сумма) .get ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...