Hej , potrzebuję pomocy z zaprojektowaniem bazy danych w java spring boot

0

Chciałbym wysłać do kontrolera user id i liste itemCart, a w bazie danych itemCart id i shopOrder id wygeneruje się samo.

package com.example.webshopback.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import javax.persistence.*;

@Entity
@Data
public class ItemCart {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn
    private Product product;

    private int quantity;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn
    @JsonProperty("order")
    private ShopOrder shopOrder;

    @Transient
    public double getTotalPrice() {
        return getProduct().getPrice() * getQuantity();
    }


}

package com.example.webshopback.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.List;

@Entity
@Data
public class ShopOrder {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @CreationTimestamp
    private LocalDateTime createDateTime;
    @UpdateTimestamp
    private LocalDateTime updateDateTime;

    @ManyToOne
    @JoinColumn
    private User user;

    @JsonIgnore
    @OneToMany(mappedBy = "shopOrder", cascade = CascadeType.ALL,orphanRemoval = true)
    private List<ItemCart> itemCarts;

    @Transient
    public Double getGrandTotalPrice() {
        double sum = 0D;
        List<ItemCart> itemCarts = getItemCarts();
        if (itemCarts == null) {
            return 0.0;
        } else
            for (ItemCart op : itemCarts) {
                sum += op.getTotalPrice();
            }
        return sum;
    }


}

0

Proszę o pomoc i wskazówki

0

Patrze na ten kod i mi się zrobiło bardzo smutno :( czy Ty chociaż wiesz co te wszystkie adnotacje robią?

W kontrolerze możesz sobie przemapować obiekt, który dostajesz na dowolny inny, np. encję. To nie musi być 1-1 z bazą danych. Pełna swoboda.

0

Dodam, o ile samo JPA jest nieco passe (poszukaj)) ale "mogłoby być" w dobrych rękach, to używanie tych samych encji JPA z jacksonem to proszenie się o katastrofę

0

Encja na twarz i pchasz, @Transient czyli dzielna walka z problemami nie znanymi w innych technologiach, to jest jakis projekt jackpot :D Weź może wrzuć tam Spring-Data-JPA i wtedy w sumie w ogóle nie będzie trzeba pisać kodu. Samo ci zrobi te CRUDowe kontrolery pod to JPA.
Z programowaniem nie ma za wiele wspólnego, ale będzie działać.

0

Ja mam małe doświadczenie w Javie, ale wydaje mi się że łącząc Lomboka, encję JPA i Jacksona dokonałeś niemożliwego.
Poczytaj:
https://dzone.com/articles/lombok-and-jpa-what-may-go-wrong
https://thorben-janssen.com/lombok-hibernate-how-to-avoid-common-pitfalls/

6
public Double getGrandTotalPrice()

0/10, nie polecam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1