Как сохранить заказ с элементами корзины в JAVA EE JPA, заказ с несколькими элементами - PullRequest
1 голос
/ 11 марта 2020

Слой доступа к данным - чтобы сохранить элемент в базе данных, он идет в исключительной ситуации

Я также добавил модели и постоянный слой, но по какой-то причине он не добавляет порядок но все требуемые значения не равны NULL и имеют значения

У меня есть список

, а тип выборки стремится

, каждый заказ может иметь несколько элементов, и Номер заказа и номер позиции ref no автоматически генерируются в основном коде приложения

public void Add(Orders order) {

    EntityManager em = DBUtil.getEmFactory().createEntityManager();
    EntityTransaction trans = em.getTransaction();

    try {

        Provinces prov = order.getShipProvince();
        prov.getOrdersList().add(order);

        User user = order.getCustomer();
        user.getOrdersList().add(order);

        Item item = new Item();
        List<OrderItem> list = order.getOrderItemList();

        for (int i = 0; i < list.size(); i++) {
            item = list.get(i).getItem();
            item.getOrderItemList().add(list.get(i));
        }

        trans.begin();

        em.persist(order);

        trans.commit();

    } catch (Exception e) {
        trans.rollback();
    } finally {
        em.close();
    }

}



package models;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@Entity
@Table(name = "orders")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Orders.findAll", query = "SELECT o FROM Orders o")
    , @NamedQuery(name = "Orders.findByOrderNumber", query = "SELECT o FROM Orders o WHERE o.orderNumber = :orderNumber")
    , @NamedQuery(name = "Orders.findByShipfname", query = "SELECT o FROM Orders o WHERE o.shipfname = :shipfname")
    , @NamedQuery(name = "Orders.findByShiplname", query = "SELECT o FROM Orders o WHERE o.shiplname = :shiplname")
    , @NamedQuery(name = "Orders.findByPhone", query = "SELECT o FROM Orders o WHERE o.phone = :phone")
    , @NamedQuery(name = "Orders.findByOrderDate", query = "SELECT o FROM Orders o WHERE o.orderDate = :orderDate")
    , @NamedQuery(name = "Orders.findByShipDate", query = "SELECT o FROM Orders o WHERE o.shipDate = :shipDate")
    , @NamedQuery(name = "Orders.findByShipAddress", query = "SELECT o FROM Orders o WHERE o.shipAddress = :shipAddress")
    , @NamedQuery(name = "Orders.findByShipCity", query = "SELECT o FROM Orders o WHERE o.shipCity = :shipCity")
    , @NamedQuery(name = "Orders.findByShipPostalCode", query = "SELECT o FROM Orders o WHERE o.shipPostalCode = :shipPostalCode")
    , @NamedQuery(name = "Orders.findByShipCost", query = "SELECT o FROM Orders o WHERE o.shipCost = :shipCost")
    , @NamedQuery(name = "Orders.findByShipCompany", query = "SELECT o FROM Orders o WHERE o.shipCompany = :shipCompany")
    , @NamedQuery(name = "Orders.findByTrackingnumber", query = "SELECT o FROM Orders o WHERE o.trackingnumber = :trackingnumber")
    , @NamedQuery(name = "Orders.findByOrderTotal", query = "SELECT o FROM Orders o WHERE o.orderTotal = :orderTotal")})
public class Orders implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "Order_Number")
    private String orderNumber;
    @Basic(optional = false)
    @Column(name = "Ship_fname")
    private String shipfname;
    @Basic(optional = false)
    @Column(name = "Ship_lname")
    private String shiplname;
    @Basic(optional = false)
    @Column(name = "Phone")
    private String phone;
    @Basic(optional = false)
    @Column(name = "Order_Date")
    @Temporal(TemporalType.DATE)
    private Date orderDate;
    @Basic(optional = false)
    @Column(name = "Ship_Date")
    @Temporal(TemporalType.DATE)
    private Date shipDate;
    @Basic(optional = false)
    @Column(name = "Ship_Address")
    private String shipAddress;
    @Basic(optional = false)
    @Column(name = "Ship_City")
    private String shipCity;
    @Basic(optional = false)
    @Column(name = "Ship_Postal_Code")
    private String shipPostalCode;
    @Basic(optional = false)
    @Column(name = "Ship_Cost")
    private double shipCost;
    @Column(name = "Ship_Company")
    private String shipCompany;
    @Column(name = "Tracking_number")
    private String trackingnumber;
    @Basic(optional = false)
    @Column(name = "Order_Total")
    private double orderTotal;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "orderNumber", fetch = FetchType.EAGER)
    private List<OrderItem> orderItemList;
    @JoinColumn(name = "Customer", referencedColumnName = "Email")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private User customer;
    @JoinColumn(name = "Ship_Province", referencedColumnName = "Province_ID")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Provinces shipProvince;

    public Orders() {
    }

    public Orders(String orderNumber) {
        this.orderNumber = orderNumber;
    }

    public Orders(String orderNumber, String shipfname, String shiplname, String phone, Date orderDate, Date shipDate, String shipAddress, String shipCity, String shipPostalCode, double shipCost, double orderTotal) {
        this.orderNumber = orderNumber;
        this.shipfname = shipfname;
        this.shiplname = shiplname;
        this.phone = phone;
        this.orderDate = orderDate;
        this.shipDate = shipDate;
        this.shipAddress = shipAddress;
        this.shipCity = shipCity;
        this.shipPostalCode = shipPostalCode;
        this.shipCost = shipCost;
        this.orderTotal = orderTotal;
    }

    public String getOrderNumber() {
        return orderNumber;
    }

    public void setOrderNumber(String orderNumber) {
        this.orderNumber = orderNumber;
    }

    public String getShipfname() {
        return shipfname;
    }

    public void setShipfname(String shipfname) {
        this.shipfname = shipfname;
    }

    public String getShiplname() {
        return shiplname;
    }

    public void setShiplname(String shiplname) {
        this.shiplname = shiplname;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Date getOrderDate() {
        return orderDate;
    }

    public void setOrderDate(Date orderDate) {
        this.orderDate = orderDate;
    }

    public Date getShipDate() {
        return shipDate;
    }

    public void setShipDate(Date shipDate) {
        this.shipDate = shipDate;
    }

    public String getShipAddress() {
        return shipAddress;
    }

    public void setShipAddress(String shipAddress) {
        this.shipAddress = shipAddress;
    }

    public String getShipCity() {
        return shipCity;
    }

    public void setShipCity(String shipCity) {
        this.shipCity = shipCity;
    }

    public String getShipPostalCode() {
        return shipPostalCode;
    }

    public void setShipPostalCode(String shipPostalCode) {
        this.shipPostalCode = shipPostalCode;
    }

    public double getShipCost() {
        return shipCost;
    }

    public void setShipCost(double shipCost) {
        this.shipCost = shipCost;
    }

    public String getShipCompany() {
        return shipCompany;
    }

    public void setShipCompany(String shipCompany) {
        this.shipCompany = shipCompany;
    }

    public String getTrackingnumber() {
        return trackingnumber;
    }

    public void setTrackingnumber(String trackingnumber) {
        this.trackingnumber = trackingnumber;
    }

    public double getOrderTotal() {
        return orderTotal;
    }

    public void setOrderTotal(double orderTotal) {
        this.orderTotal = orderTotal;
    }

    @XmlTransient
    public List<OrderItem> getOrderItemList() {
        return orderItemList;
    }

    public void setOrderItemList(List<OrderItem> orderItemList) {
        this.orderItemList = orderItemList;
    }

    public User getCustomer() {
        return customer;
    }

    public void setCustomer(User customer) {
        this.customer = customer;
    }

    public Provinces getShipProvince() {
        return shipProvince;
    }

    public void setShipProvince(Provinces shipProvince) {
        this.shipProvince = shipProvince;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (orderNumber != null ? orderNumber.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Orders)) {
            return false;
        }
        Orders other = (Orders) object;
        if ((this.orderNumber == null && other.orderNumber != null) || (this.orderNumber != null && !this.orderNumber.equals(other.orderNumber))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "models.Orders[ orderNumber=" + orderNumber + " ]";
    }

}



package models;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;


@Entity
@Table(name = "orders")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Orders.findAll", query = "SELECT o FROM Orders o")
    , @NamedQuery(name = "Orders.findByOrderNumber", query = "SELECT o FROM Orders o WHERE o.orderNumber = :orderNumber")
    , @NamedQuery(name = "Orders.findByShipfname", query = "SELECT o FROM Orders o WHERE o.shipfname = :shipfname")
    , @NamedQuery(name = "Orders.findByShiplname", query = "SELECT o FROM Orders o WHERE o.shiplname = :shiplname")
    , @NamedQuery(name = "Orders.findByPhone", query = "SELECT o FROM Orders o WHERE o.phone = :phone")
    , @NamedQuery(name = "Orders.findByOrderDate", query = "SELECT o FROM Orders o WHERE o.orderDate = :orderDate")
    , @NamedQuery(name = "Orders.findByShipDate", query = "SELECT o FROM Orders o WHERE o.shipDate = :shipDate")
    , @NamedQuery(name = "Orders.findByShipAddress", query = "SELECT o FROM Orders o WHERE o.shipAddress = :shipAddress")
    , @NamedQuery(name = "Orders.findByShipCity", query = "SELECT o FROM Orders o WHERE o.shipCity = :shipCity")
    , @NamedQuery(name = "Orders.findByShipPostalCode", query = "SELECT o FROM Orders o WHERE o.shipPostalCode = :shipPostalCode")
    , @NamedQuery(name = "Orders.findByShipCost", query = "SELECT o FROM Orders o WHERE o.shipCost = :shipCost")
    , @NamedQuery(name = "Orders.findByShipCompany", query = "SELECT o FROM Orders o WHERE o.shipCompany = :shipCompany")
    , @NamedQuery(name = "Orders.findByTrackingnumber", query = "SELECT o FROM Orders o WHERE o.trackingnumber = :trackingnumber")
    , @NamedQuery(name = "Orders.findByOrderTotal", query = "SELECT o FROM Orders o WHERE o.orderTotal = :orderTotal")})
public class Orders implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "Order_Number")
    private String orderNumber;
    @Basic(optional = false)
    @Column(name = "Ship_fname")
    private String shipfname;
    @Basic(optional = false)
    @Column(name = "Ship_lname")
    private String shiplname;
    @Basic(optional = false)
    @Column(name = "Phone")
    private String phone;
    @Basic(optional = false)
    @Column(name = "Order_Date")
    @Temporal(TemporalType.DATE)
    private Date orderDate;
    @Basic(optional = false)
    @Column(name = "Ship_Date")
    @Temporal(TemporalType.DATE)
    private Date shipDate;
    @Basic(optional = false)
    @Column(name = "Ship_Address")
    private String shipAddress;
    @Basic(optional = false)
    @Column(name = "Ship_City")
    private String shipCity;
    @Basic(optional = false)
    @Column(name = "Ship_Postal_Code")
    private String shipPostalCode;
    @Basic(optional = false)
    @Column(name = "Ship_Cost")
    private double shipCost;
    @Column(name = "Ship_Company")
    private String shipCompany;
    @Column(name = "Tracking_number")
    private String trackingnumber;
    @Basic(optional = false)
    @Column(name = "Order_Total")
    private double orderTotal;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "orderNumber", fetch = FetchType.EAGER)
    private List<OrderItem> orderItemList;
    @JoinColumn(name = "Customer", referencedColumnName = "Email")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private User customer;
    @JoinColumn(name = "Ship_Province", referencedColumnName = "Province_ID")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Provinces shipProvince;

    public Orders() {
    }

    public Orders(String orderNumber) {
        this.orderNumber = orderNumber;
    }

    public Orders(String orderNumber, String shipfname, String shiplname, String phone, Date orderDate, Date shipDate, String shipAddress, String shipCity, String shipPostalCode, double shipCost, double orderTotal) {
        this.orderNumber = orderNumber;
        this.shipfname = shipfname;
        this.shiplname = shiplname;
        this.phone = phone;
        this.orderDate = orderDate;
        this.shipDate = shipDate;
        this.shipAddress = shipAddress;
        this.shipCity = shipCity;
        this.shipPostalCode = shipPostalCode;
        this.shipCost = shipCost;
        this.orderTotal = orderTotal;
    }

    public String getOrderNumber() {
        return orderNumber;
    }

    public void setOrderNumber(String orderNumber) {
        this.orderNumber = orderNumber;
    }

    public String getShipfname() {
        return shipfname;
    }

    public void setShipfname(String shipfname) {
        this.shipfname = shipfname;
    }

    public String getShiplname() {
        return shiplname;
    }

    public void setShiplname(String shiplname) {
        this.shiplname = shiplname;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Date getOrderDate() {
        return orderDate;
    }

    public void setOrderDate(Date orderDate) {
        this.orderDate = orderDate;
    }

    public Date getShipDate() {
        return shipDate;
    }

    public void setShipDate(Date shipDate) {
        this.shipDate = shipDate;
    }

    public String getShipAddress() {
        return shipAddress;
    }

    public void setShipAddress(String shipAddress) {
        this.shipAddress = shipAddress;
    }

    public String getShipCity() {
        return shipCity;
    }

    public void setShipCity(String shipCity) {
        this.shipCity = shipCity;
    }

    public String getShipPostalCode() {
        return shipPostalCode;
    }

    public void setShipPostalCode(String shipPostalCode) {
        this.shipPostalCode = shipPostalCode;
    }

    public double getShipCost() {
        return shipCost;
    }

    public void setShipCost(double shipCost) {
        this.shipCost = shipCost;
    }

    public String getShipCompany() {
        return shipCompany;
    }

    public void setShipCompany(String shipCompany) {
        this.shipCompany = shipCompany;
    }

    public String getTrackingnumber() {
        return trackingnumber;
    }

    public void setTrackingnumber(String trackingnumber) {
        this.trackingnumber = trackingnumber;
    }

    public double getOrderTotal() {
        return orderTotal;
    }

    public void setOrderTotal(double orderTotal) {
        this.orderTotal = orderTotal;
    }

    @XmlTransient
    public List<OrderItem> getOrderItemList() {
        return orderItemList;
    }

    public void setOrderItemList(List<OrderItem> orderItemList) {
        this.orderItemList = orderItemList;
    }

    public User getCustomer() {
        return customer;
    }

    public void setCustomer(User customer) {
        this.customer = customer;
    }

    public Provinces getShipProvince() {
        return shipProvince;
    }

    public void setShipProvince(Provinces shipProvince) {
        this.shipProvince = shipProvince;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (orderNumber != null ? orderNumber.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Orders)) {
            return false;
        }
        Orders other = (Orders) object;
        if ((this.orderNumber == null && other.orderNumber != null) || (this.orderNumber != null && !this.orderNumber.equals(other.orderNumber))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "models.Orders[ orderNumber=" + orderNumber + " ]";
    }

}


package models;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;


@Entity
@Table(name = "item")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Item.findAll", query = "SELECT i FROM Item i")
    , @NamedQuery(name = "Item.findByUpsc", query = "SELECT i FROM Item i WHERE i.upsc = :upsc")
    , @NamedQuery(name = "Item.findByName", query = "SELECT i FROM Item i WHERE i.name = :name")
    , @NamedQuery(name = "Item.findByDescription", query = "SELECT i FROM Item i WHERE i.description = :description")
    , @NamedQuery(name = "Item.findByCost", query = "SELECT i FROM Item i WHERE i.cost = :cost")
    , @NamedQuery(name = "Item.findByRetailCost", query = "SELECT i FROM Item i WHERE i.retailCost = :retailCost")
    , @NamedQuery(name = "Item.findByImageLink", query = "SELECT i FROM Item i WHERE i.imageLink = :imageLink")
    , @NamedQuery(name = "Item.findByQuantity", query = "SELECT i FROM Item i WHERE i.quantity = :quantity")})
public class Item implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "Upsc")
    private String upsc;
    @Basic(optional = false)
    @Column(name = "Name")
    private String name;
    @Column(name = "Description")
    private String description;
    @Basic(optional = false)
    @Column(name = "Cost")
    private double cost;
    @Basic(optional = false)
    @Column(name = "Retail_Cost")
    private double retailCost;
    @Basic(optional = false)
    @Column(name = "Image_Link")
    private String imageLink;
    @Basic(optional = false)
    @Column(name = "Quantity")
    private int quantity;
    @JoinColumn(name = "Category", referencedColumnName = "Category_ID")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Category category;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "item", fetch = FetchType.EAGER)
    private List<OrderItem> orderItemList;

    public Item() {
    }

    public Item(String upsc) {
        this.upsc = upsc;
    }

    public Item(String upsc, String name, String description, double cost, double retailCost, String imageLink, int quantity) {
        this.upsc = upsc;
        this.name = name;
        this.description =description;
        this.cost = cost;
        this.retailCost = retailCost;
        this.imageLink = imageLink;
        this.quantity = quantity;
    }

    public String getUpsc() {
        return upsc;
    }

    public void setUpsc(String upsc) {
        this.upsc = upsc;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public double getCost() {
        return cost;
    }

    public void setCost(double cost) {
        this.cost = cost;
    }

    public double getRetailCost() {
        return retailCost;
    }

    public void setRetailCost(double retailCost) {
        this.retailCost = retailCost;
    }

    public String getImageLink() {
        return imageLink;
    }

    public void setImageLink(String imageLink) {
        this.imageLink = imageLink;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    @XmlTransient
    public List<OrderItem> getOrderItemList() {
        return orderItemList;
    }

    public void setOrderItemList(List<OrderItem> orderItemList) {
        this.orderItemList = orderItemList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (upsc != null ? upsc.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Item)) {
            return false;
        }
        Item other = (Item) object;
        if ((this.upsc == null && other.upsc != null) || (this.upsc != null && !this.upsc.equals(other.upsc))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "models.Item[ upsc=" + upsc + " ]";
    }

}

1 Ответ

1 голос
/ 11 марта 2020

В предложении catch выдана ошибка:

com. mysql .jdb c .exceptions.jdbc4.MySQLIntegrityConstraintViolationException: столбец Ship_Date не может быть нулевым. Код ошибки : 1048 Вызов: INSERT INTO заказы (Order_Number, Order_Date, Order_Total, Телефон, Ship_Address, Ship_City, Ship_Company, Ship_Cost, Ship_Date, Ship_Postal_Code, Ship_fname, Ship_lname, Tracking_number, Клиент, Ship_Province) VALUES??? ?,?,?,?,?,?,?,?,?,?) bind => [15 параметров привязаны] Запрос: InsertObjectQuery (models.Orders [orderNumber = 2003110202550000631])

Это означает, что Ship_Date должно иметь значение при вставке / обновлении.

...