当前位置: 首页 > 知识库问答 >
问题:

使用多个相同类型的对象保存hibernate实体

双恩
2023-03-14

当我保存以下实体时,它在另一个对象中复制相同的值:

例如,在我的struts项目(屏幕)中,如果我更改shipmentShipper字段的值,那么Shipment收货人也将使用相同的值进行更新。

实体:

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。请注意,两个选择都使用相同的数据列表填充。(客户名单)

共有1个答案

夹谷衡
2023-03-14

我认为,您应该在

 类似资料:
  • 背景:对于我的用户,我需要存储一对相同的对象类型(设置),目前我有它像 我正在创建带有设置的KeyValueTypes,并将其添加到列表中(每个用户都有一个列表)。我的设置有一个值字段(它显示了它们是否比其他设置“更重要”),所以我希望基于该字段添加它们,稍后我还需要基于该字段(可能还需要基于名称字段)进行搜索--所以搜索将不得不在列表中查找,然后在KeyValueTypes中查找 问题:什么是最

  • 问题内容: 我正在尝试使用hibernate模式写入多个数据库。我已经将写和读/写会话封装在单个会话对象中。但是,当我去保存时,出现很多错误,这些对象已与另一个会话关联:“非法尝试将一个集合与两个打开的会话关联” 这是我的代码: 我试图逐出该物体并冲洗;但是,这会导致“行被另一个事务更新或删除”问题,即使两个会话都指向不同的数据库。 除了上述内容,我还尝试使用hibernate的复制功能。没有错误

  • 我正在使用Mockito编写单元测试,但我在模仿注入的类时遇到了问题。问题是两个注入的类是相同的类型,仅通过它们的注释来区分。如果我试图简单地模拟,那么在我的测试中,该模拟不会被注入,并且该对象为。我如何模拟这些对象?

  • 本文向大家介绍创建许多相同类型的JavaScript对象?,包括了创建许多相同类型的JavaScript对象?的使用技巧和注意事项,需要的朋友参考一下 创建单个对象比创建相同类型的多个对象要容易得多。为了克服这一障碍,javascript提供了对象构造函数。使用此函数,首先,我们必须创建对象的类型,然后,我们需要声明对象的属性 。 示例 在下面的示例中,最初,我们声明了包含“名称”,“属性”,“年

  • 问题内容: 在hibernate状态下,查询似乎有些困难。我正在两个表上执行内部联接。 产品表: 仓库表: 联接结果: 当我运行查询.. 因此,对于每个结果,我都会得到一个包含a 和a 的对象。 这是预期的。问题是hibernate将产品的ID和名称分配给仓库对象的ID和名称属性。在创建Warehouse项目时,好像联接结果中的前两列已经结束了。产品对象始终包含正确的数据。 关于解决此问题的任何建