Класс сущности для сценария, использующего спящий режим - PullRequest
0 голосов
/ 14 марта 2019

Сценарий

  1. Выбор сведений о продукте для конкретного заказа.
  2. Выбор сведений о заказе для конкретного продукта.

Таблицы SQL-сервера

  1. Table_Orders
  2. Table_OrderDetails
  3. Table_Products

Классы сущностей

  1. Model_orders

    @Entity
    @Table(name="Tbl_Orders")
    public class Order
    {
        public Order() {
        }
    
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="Order_ID")
        private Long orderId;
    
        @Column(name="OrderNo")
        private String orderNumber;
    
        @Column(name="OrderDate")
        private Date orderDate;
    
        @ManyToOne()
        @JoinColumn(name="User_ID")
        private Customer customerOrder;
    
    
    
        public Long getOrderId() {
            return orderId;
        }
    
        public void setOrderId(Long orderId) {
            this.orderId = orderId;
        }
    
        public String getOrderNumber() {
            return orderNumber;
        }
    
        public void setOrderNumber(String orderNumber) {
            this.orderNumber = orderNumber;
        }
    
        public Date getOrderDate() {
            return orderDate;
        }
    
        public void setOrderDate(Date orderDate) {
            this.orderDate = orderDate;
        }
    
        public Customer getCustomerOrder() {
            return customerOrder;
        }
    
        public void setCustomerOrder(Customer customerOrder) {
            this.customerOrder = customerOrder;
        }
    }
    
  2. Model_OrderDetails

    @Entity
    @Table(name = "Tbl_OrderDetails")
    public class OrderDetail {
    
        public OrderDetail() {
            super();
        }
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "OrderDetail_ID")
        private Long orderDetailsId;
    
        @ManyToOne
        @JoinColumn(name = "Order_ID")
        private Order orderId;
    
        @ManyToOne
        @JoinColumn(name = "Product_ID")
        private ProductMaster product;
    
    
        public Long getOrderDetailsId() {
            return orderDetailsId;
        }
    
        public void setOrderDetailsId(Long orderDetailsId) {
            this.orderDetailsId = orderDetailsId;
        }
    
        public Order getOrderId() {
            return orderId;
        }
    
        public void setOrderId(Order orderId) {
            this.orderId = orderId;
        }
    
    
    
        public ProductMaster getProduct() {
            return product;
        }
    
        public void setProduct(ProductMaster product) {
            this.product = product;
        }
    }
    
  3. Model_Products

    @Entity
    @Table (name = "Tbl_Products")
    public class ProductMaster
    {
        public Products() {
        }
    
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column (name = "Product_ID")
        @Field(index= Index.YES, analyze= Analyze.YES, store= Store.YES)
        private Long productId;
    
        @Column (name = "Product_Code")
        private String productCode;
    
        @Column (name = "Product_Name")
        @Field(index= Index.YES, analyze= Analyze.YES, store= Store.YES  ,analyzer=@Analyzer(definition = "customanalyzer"))
        private String productName;
    
    
    
        public Long getProductId() {
            return productId;
        }
    
        public void setProductId(Long productId) {
            this.productId = productId;
        }
    
    
        public String getProductCode() {
            return productCode;
        }
    
        public void setProductCode(String productCode) {
            this.productCode = productCode;
        }
    
        public String getProductName() {
            return productName;
        }
    
        public void setProductName(String productName) {
            this.productName = productName;
        }
    }
    

Описание проблемы

В этих классах сущностей я использовал сопоставление много-к-одному во всех трех классах.Мой сценарий, упомянутый выше, много ко многим.В одном заказе может быть несколько продуктов, в то же время один и тот же продукт размещен во многих заказах.

Моя проблема заключается в использовании идентификатора заказа, который необходим мне для получения всей информации о продукте.Аналогичным образом, используя идентификатор продукта, мне нужно получить все детали заказа.Я думаю использовать отображение один-ко-многим в классе сущностей деталей детализации, но я не знаю, как отобразить его.Это правильный путь?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Получить информацию о продукте конкретного заказа.

Создание двунаправленного сопоставления Order to OrderDetail.

Into Order:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "orderId", fetch = FetchType.LAZY)
private Collection<OrderDetail> ordersDetail;

Получить информацию о заказе конкретного продукта.

Создание двунаправленного сопоставления ProductMaster с OrderDetail.

Into ProductMaster:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product", fetch = FetchType.LAZY)
private Collection<OrderDetail> ordersDetail;
0 голосов
/ 14 марта 2019

В вашем коде целью Table_OrderDetails является просто создание отображения между Order_ID и Product_ID.Так что это не должно создаваться как отдельная сущность.Вместо этого следует использовать Hibernates @ManyToMany.

Order.java

import javax.persistence.*;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(name="Tbl_Orders")
public class Order
{
    public Order() {
    }
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="Order_ID")
    private Long orderId;

    @Column(name="OrderNo")
    private String orderNumber;

    @Column(name="OrderDate")
    private Date orderDate;

    @ManyToMany
    @JoinTable(name = "Tbl_OrderDetails",
            joinColumns = @JoinColumn(name = "Order_ID"),
            inverseJoinColumns = @JoinColumn(name = "Product_ID"))
    private List<ProductMaster> productMasters = new ArrayList<>();

    public Long getOrderId() {
        return orderId;
    }

    public void setOrderId(Long orderId) {
        this.orderId = orderId;
    }

    public String getOrderNumber() {
        return orderNumber;
    }

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

    public Date getOrderDate() {
        return orderDate;
    }

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

    public List<ProductMaster> getProductMasters() {
        return productMasters;
    }

    public void setProductMasters(List<ProductMaster> productMasters) {
        this.productMasters = productMasters;
    }
}

ProductMaster.java

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(name = "Tbl_Products")
public class ProductMaster
{
    public ProductMaster() {
    }

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column (name = "Product_ID")
    private Long productId;

    @Column (name = "Product_Code")
    private String productCode;

    @Column (name = "Product_Name")
    private String productName;

    @ManyToMany(mappedBy = "productMasters")
    private List<Order> orders = new ArrayList<>();

    public Long getProductId() {
        return productId;
    }

    public void setProductId(Long productId) {
        this.productId = productId;
    }


    public String getProductCode() {
        return productCode;
    }

    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public List<Order> getOrders() {
        return orders;
    }

    public void setOrders(List<Order> orders) {
        this.orders = orders;
    }
}

Это автоматически создаст третью таблицу Tbl_OrderDetails с обоимистолбцы идентификаторов.И вы сможете получить все заказы на один товар и все товары в одном заказе.

...