簡體   English   中英

保存具有多個相同類型對象的 hibernate 實體

[英]saving hibernate entity with multiple objects of same type

當我保存以下實體時,它會在另一個 object 中復制相同的值:

例如,從我的 struts 項目(屏幕)中,如果我更改字段shippingShipper的值,則shippingConsignee也會更新為相同的值。

實體:

package com.logistics.entities.orderManagement;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;

import com.dsiksjane.beans.common.NecessaryFields;
import com.logistics.entities.customers.Customers;

import lombok.Getter;
import lombok.Setter;

@Entity
@Table(name="orders") 
@Getter
@Setter
public class Orders extends NecessaryFields {

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

    @Column(name="consignee_ntn")
    private String consigneeNtn;

    /**
     * Clearing Agent
     */
    @ManyToOne
    @NotFound(action = NotFoundAction.IGNORE)   
    @JoinColumn(name="clearing_agent_name")
    private Customers clearingAgentName;

    @ManyToOne
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name="shipment_shipper")
    private Customers shipmentShipper;

    @ManyToOne
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name="shipment_consignee")
    private Customers shipmentConsignee;

    @ManyToOne
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name="shipment_notify_party")
    private Customers shipmentNotifyParty;

    @ManyToOne
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name="shipment_forwarder")
    private Customers shipmentForwarder;


    @Column(name="clearing_agent_challan")
    private String clearingAgentChallan;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "order_details_id", referencedColumnName = "id")
    private OrdersDetail orderDetails;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "order_address_id", referencedColumnName = "id")
    private OrdersAddress orderAddress;

}

存儲庫 class:

@Service
public class OrderManagementService implements IOrderManagementService {

    @Autowired
    private IOrderManagementDAO dao;

    @Override
    public OrderManagementCO save(OrderManagementCO orderManagementCO, LoginBean loggedInUser) throws Exception {
    
        Orders obj = orderManagementCO.getOrder();
    
        if( obj.getId() != null ) {
            obj.setUpdatedBy(loggedInUser.getUserName());
            obj.setUpdatedDate( new java.util.Date() );
        } else {
            obj.setCreatedBy(loggedInUser.getUserName());
            obj.setCreatedDate( new java.util.Date() );
            obj.setCompanyId( loggedInUser.getCompanyId() );
        }
    
        dao.save( obj ); 
    
        return orderManagementCO;
    }
}

JSP 中的字段映射(工作正常):

<s:select id="selectShipper" class="custom-field"
name="orderManagementCO.order.shipmentShipper.id" 
label="Service Type" headerKey="-1" headerValue="Select Shipper" 
list="%{customersList}" listKey="id" listValue="fullName" />

<s:select id="selectConsignee" class="custom-field"
name="orderManagementCO.order.shipmentConsignee.id" 
label="Consignee" headerKey="-1" headerValue="Select Consignee" 
list="%{customersList}" listKey="id" listValue="fullName" />

請檢查屏幕截圖,我將托運人更改為 C4 並保存。 收貨人也被選為C4。 請注意,兩個選擇都填充了相同的數據列表。 (客戶名單)

在此處輸入圖像描述

我認為,您應該在<s:select>標記中使用value屬性,並且該屬性應該具有您發送到后端的值。 可能類似於value="%{orderManagementCO.order.shipmentShipper.id}" ,而另一個應該是value="%{orderManagementCO.order.shipmentConsignee.id}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM