【发布时间】:2021-12-31 10:35:48
【问题描述】:
当我保存下面的实体时,它在另一个对象中复制了相同的值:
例如,从我的 struts 项目(屏幕)中,如果我更改字段 shipmentShipper 的值,那么 shipmentConsignee 也会更新为相同的值。
Struts 配置:
<struts>
<package name="orderManagement" namespace="/orderManagement" extends="struts-default">
<action name="OrderManagementAction" class="com.logistics.actions.orderManagement.OrderManagementAction" method="executeOnLoad">
<result name="success">/WEB-INF/pages/orderManagment/orderManagement.jsp</result>
<result name="list">/WEB-INF/pages/orderManagment/orderManagementList.jsp</result>
<result name="error">index.jsp</result>
</action>
</package>
</struts>
动作类:
package com.logistics.actions.orderManagement;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.dsiksjane.actions.base.BaseAction;
import com.dsiksjane.actions.login.LoginCO;
import com.dsiksjane.beans.LoginBean;
import com.dsiksjane.beans.common.LookupBean;
import com.dsiksjane.common.CommonConstants;
import com.logistics.entities.customers.Customers;
import com.logistics.entities.orderManagement.Orders;
import com.logistics.service.customers.ICustomersService;
import com.logistics.service.orderManagement.IOrderManagementService;
import lombok.Getter;
import lombok.Setter;
/**
*
* @author Sikandar Mahmood
*
*/
@Component
@Getter
@Setter
public class OrderManagementAction extends BaseAction {
private OrderManagementCO orderManagementCO = new OrderManagementCO();
private List<LookupBean> orderTypeList = new ArrayList<LookupBean>();
private List<Customers> customersList = new ArrayList<Customers>();
private List<Customers> agentsList = new ArrayList<Customers>();
private List<Customers> portsList = new ArrayList<Customers>();
@Autowired
private IOrderManagementService service;
@Autowired
private ICustomersService customerService;
/**
* On Load method
* @return
* @throws Exception
*/
public String executeOnLoad() throws Exception {
String actionCommand = (String) getRequestParameter("actionCommand") == null ? SUCCESS : (String) getRequestParameter("actionCommand");
switch (actionCommand) {
case SUCCESS:
init();
//orderManagementCO.setOrder(null);
setPage(SUCCESS);
break;
case CLEAR:
init();
orderManagementCO.setOrder(null);
setPage(SUCCESS);
break;
case EDIT_RECORD:
init();
Long id = Long.parseLong( (String) getRequestParameter("id") );
Orders order = service.getOrder(id);
orderManagementCO.setOrder(order);
setPage(SUCCESS);
break;
case LIST:
List<Orders> orders = service.getMainList();
getRequest().setAttribute("objectList", orders );
setPage(LIST);
break;
case SUBMIT:
LoginCO loginCO = ((LoginCO) getSessionMap().get("loginCO"));
LoginBean loggedInUser = loginCO.getUserBean();
if( loggedInUser == null )
return ERROR;
service.save(orderManagementCO, loggedInUser);
setPage(SUCCESS);
break;
default: // do nothing..
}
return getPage();
}
/**
* This method fills the default values for the page being loaded...
* @throws Exception
*/
public void fillDefaultValues() throws Exception {
getDefaultValueOrderType();
}
public String getDefaultValueOrderType() throws Exception {
String defaultOrderType = getBaseService().getDefaultLookupValue(CommonConstants.LOOKUP_TABLE_ORDER_TYPES);
return defaultOrderType;
}
/**
* Initialization of page
*
* @throws Exception
*/
public void init() throws Exception {
setOrderTypeList(getBaseService().getLookupByTable(CommonConstants.LOOKUP_TABLE_ORDER_TYPES));
setCustomersList( getCustomerService().getMainList() );
setAgentsList( getCustomerService().getAgentsList() );
setPortsList( getCustomerService().getPortsList() );
fillDefaultValues();
}
}
实体:
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;
}
存储库类:
@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。请注意,两个选择都填充了相同的数据列表。 (客户名单)
【问题讨论】: