Мне не удалось понять следующую проблему.
У меня есть один файл DTO следующим образом. ClientRegistrationDTO.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;
}
}
Таким образом, у меня есть метод registerClient
, который принимает этот файл DTO для работы над сохранением client
, а также user
. Следующим образом
public ClientRagistrationResponce registerClient(
ClientRegistrationDTO clientRegistrationDTO) {
ClientRagistrationResponce clientInfo = null;
if (clientRegistrationDTO != null) {
clientInfo = new ClientRagistrationResponce(); // creating responce variable
//setting another ragisterDTO file with default value
ClientRegistrationDTO clientRegistrationDTO2 = new
Line no 9 ClientRegistrationDTO(clientRegistrationDTO.getAddresses(),clientRegistrationDTO.getContactDetails());
// creating addresses Set from clientRegistrationDTO to insert
// against user.
Line no 15 Set<Address> clientAddress = new HashSet<>(clientRegistrationDTO.getAddresses());
Line no 16 Set<ContactDetails> clientContactDetails = new HashSet<>(clientRegistrationDTO.getContactDetails());
Line no 18 Set<Address> userAddress = new HashSet<>(clientRegistrationDTO2.getAddresses());
Line no 19 Set<ContactDetails> userContactDetails = new HashSet<>(clientRegistrationDTO2.getContactDetails());
// Save the client
Client client = saveClient(clientRegistrationDTO);
// Save the contact info
ContactInfo clientContactInfo = saveContactInfo(
client.getClientId(), RDHCoreConstants.CONTACT_TYPE_CLIENT);
// Save client addresses
Line no 29 Set<Address> clientAddressSet = saveClientAddresses(
clientContactInfo.getContactInfoId(), clientAddress);
// Save Client contact details
Line no 33 Set<ContactDetails> clientContactDetailsSet = saveClientContactDetails(
clientContactInfo.getContactInfoId(), clientContactDetails);
// save user
User user = saveUser(clientRegistrationDTO);
// Save User contact info
ContactInfo userContactInfo = saveContactInfo(user.getUserId(),
RDHCoreConstants.CONTACT_TYPE_USER);
// Save User addresses
saveUserAddresses(userContactInfo.getContactInfoId(), userAddress);
// Save User contact details
saveUserContactDetails(userContactInfo.getContactInfoId(),
userContactDetails);
saveClientUser(client.getClientId(), user.getUserId());
// setting the return DTO
clientInfo.setClientId(client.getClientId());
clientInfo.setAddresses(clientAddressSet);
clientInfo.setContactDetails(clientContactDetailsSet);
}
return clientInfo;
}
Сначала я создал еще один объект с другим именем того же типа, чтобы установить адрес и контактные данные в безопасности при обновлении. @Line no 9.
Так что теперь, когда клиент Адрес & ContactDetails сохранен @ line no 29 & 33.
, он обновляет адрес в файле ClientRagistrationDTO.java
и всю ссылку, которую я передал, чтобы создать еще один набор Адрес и contactDetails . @ Line no 9.
Я запутался, почему он обновляет все свои ссылки, хотя я никогда не обновлял их.
Пожалуйста, ведите меня шаг за шагом.
Примечание : Я использовал JPA Spring Data со следующим соотношением ContactInfo
Таблица имеет contactInfoId
как primary_key . который Foreign_key в Address
, а также ContactDetails
.
Follwing является сущностью таблиц. 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;
}
Follwing является адресом
@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;
}
Follwing - КонтактДетали.
@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;
}
Надеюсь, что для решения этой проблемы предоставлено достаточно информации.