[英]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.