需要了解创建对象和更新引用的Java8行为

需要了解创建对象和更新引用的Java8行为,java,jpa,java-8,spring-data-jpa,Java,Jpa,Java 8,Spring Data Jpa,我不理解下面的问题。 我有一个DTO文件,如下所示。clientRegistrationTo.java public class ClientRegistrationDTO { private Long clientId; private String clientCode; private String clientName; private String url; private String logo; private Lo

我不理解下面的问题。 我有一个DTO文件,如下所示。
clientRegistrationTo.java

public class ClientRegistrationDTO {    
    private Long clientId;

    private String clientCode;

    private String clientName;

    private String url;

    private String logo;

    private Long languageId;

    private String timeZone;

    //contact details   
    private Set<Address> addresses;
    private Set<ContactDetails> contactDetails;

    public ClientRegistrationDTO(){}

    public ClientRegistrationDTO(Set<Address> addressSet,Set<ContactDetails> contactDetails){
        this.addresses = addressSet;
        this.contactDetails = contactDetails;
    }   

}
首先,我创建了另一个具有相同类型的不同名称的对象来设置地址&联系人详细信息可以安全地进行更新<代码>@第9行。

因此,现在每当客户端地址联系人详细信息保存
@第29行和第33行时,
它就会更新
clientRegistrationTo.java
文件中的地址以及我为创建另一组地址联系人详细信息而传递的所有引用<代码>@第9行。

我很困惑,为什么它要更新它的所有引用,尽管我从未更新过相同的引用

请一步一步地引导我

注意:我使用了具有以下关系的Spring数据JPA
ContactInfo
表中的
contactInfoId
作为主键。在
地址
以及
联系人详细信息
中输入外键

以下是表格的实体。ContactInfo

@Entity
@Table(name = "contactinfo", schema = "test")
public @Data class ContactInfo {
    @Id
    @Column(name = "CONTACTINFOID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long contactInfoId;

    @Column(name="CLIENTUSERID")
    private Long clientUserId;

    @Column(name = "CONTACTTYPE")
    @NotNull
    @Size(min = 1, max = 10)
    private String contactType;

}
以下是地址

@Entity
@Table(name = "address", schema = "test")
public class Address {
    @Id
    @Column(name = "ADDRESSID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long addressId;

    @Column(name = "ADDRESS1")
    @Size(min = 1, max = 50)
    private String address1;

    @Column(name = "ADDRESS2")
    @Size(min = 1, max = 50)
    private String address2;

    @Column(name = "CITY")
    @Size(min = 1, max = 50)
    private String city;

    @Column(name = "ZIP")
    @Size(min = 1, max = 15)
    private String zip;

    @Column(name = "STATE")
    @Size(min = 1, max = 50)
    private String state;

    @Column(name = "COUNTRY")
    @Size(min = 1, max = 50)
    private String country;

    @Column(name = "ISPRIMARY")
    @NotNull
    @Size(min = 1, max = 1)
    private String isPrimary;


    @Column(name = "CONTACTINFOID")
    private Long contactInfoId;


}
以下是联系人详细信息。

@Entity
@Table(name = "contactdetails", schema = "test")
public class ContactDetails {
    @Id
    @Column(name = "CONTACTDETAILSID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long contactId;

    @Column(name = "CONTACTTYPE")
    @NotNull
    @Size(min = 1, max = 20)
    private String contactType;

    @Column(name = "CONTACTDETAIL")
    @NotNull
    @Size(min = 1, max = 20)
    private String contactDetail;

    @Column(name = "EXTENSION")
    private String extension;

    @Column(name = "ISPRIMARY")
    @NotNull
    @Size(min = 1, max = 1)
    private String isPrimary;

    @Column(name = "CONTACTINFOID")
    private Long contactInfoId;
}

希望提供足够的信息来解决此问题。

其工作原理与以前的版本相同。如果您在理解引用是如何工作的方面遇到困难,那么可以看看有多少代码。请你改一下好吗?至少我不会把你的问题通读一遍。您不需要阅读所有代码,只需阅读段落或文本即可。你会理解我的问题。如果它被更新了,那么它会在代码中更新。另一种选择是一个被诅咒的JVM。问题太大,也不清楚,但我假设你共享同一个收藏,当它更新时,你会惊讶地发现你认为是不同的收藏实际上是同一个。真的吗?为什么初学者从使用JPA的业务应用程序开始?您是否了解JPA的用途和/或使用它的原因?当它将一个对象存储到数据库时,ID很重要,从Java的角度来看,ID只是一个属性。当它从数据库中恢复一个对象时,ID同样重要,从Java的角度来看,ID仍然只是一个属性。当您有两个不同的Java对象,它们的属性值与数据库认为的ID相同时,它们将通过数据库“神奇地”同步它们的其他属性。您必须注意分配唯一的ID。
@Entity
@Table(name = "contactdetails", schema = "test")
public class ContactDetails {
    @Id
    @Column(name = "CONTACTDETAILSID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long contactId;

    @Column(name = "CONTACTTYPE")
    @NotNull
    @Size(min = 1, max = 20)
    private String contactType;

    @Column(name = "CONTACTDETAIL")
    @NotNull
    @Size(min = 1, max = 20)
    private String contactDetail;

    @Column(name = "EXTENSION")
    private String extension;

    @Column(name = "ISPRIMARY")
    @NotNull
    @Size(min = 1, max = 1)
    private String isPrimary;

    @Column(name = "CONTACTINFOID")
    private Long contactInfoId;
}