为了账号安全,请及时绑定邮箱和手机立即绑定

Java - 使用地址对象更新用户对象的两个复杂字段

Java - 使用地址对象更新用户对象的两个复杂字段

烙印99 2021-06-10 18:01:41
我在玩 Hibernate 和 Postgres。我有一个用户类如下import javax.persistence.AttributeOverride;import javax.persistence.AttributeOverrides;import javax.persistence.Column;import javax.persistence.Embedded;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Lob;import javax.persistence.Table;@Entity@Table(name="USER_DETAILS")public class UserDetails {@Id @GeneratedValueprivate int userId;private String userName;@Temporal(TemporalType.DATE)private Date joinedDate;@Embeddedprivate Address homeAddress;@Embedded@AttributeOverrides({    @AttributeOverride(name="street", column = @Column(name="OFFICE_STREET_NAME")),    @AttributeOverride(name="city", column = @Column(name="OFFICE_CITY_NAME")),    @AttributeOverride(name="state", column = @Column(name="OFFICE_STATE_ABBR")),    @AttributeOverride(name="pincode", column = @Column(name="OFFICE_PIN_CODE"))})private Address officeAddress;@Lob@Type(type="text")private String description;public int getUserId() {    return userId;}public void setUserId(int userId) {    this.userId = userId;}public String getUserName() {    return userName;}public void setUserName(String userName) {    this.userName = userName;}public Date getJoinedDate() {    return joinedDate;}public void setJoinedDate(Date joinedDate) {    this.joinedDate = joinedDate;}public String getDescription() {    return description;}public void setDescription(String description) {    this.description = description;}public Address getHomeAddress() {    return homeAddress;}public void setHomeAddress(Address homeAddress) {    this.homeAddress = homeAddress;}public Address getOfficeAddress() {    return officeAddress;}public void setOfficeAddress(Address officeAddress) {    this.officeAddress = officeAddress;}}
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

发生这种情况是因为您仍在使用相同的地址对象。如果您希望它们是单独的地址,则必须创建一个新地址。


Address addr = new Address();

addr.setStreet("Home Street");

addr.setCity("Home City");

addr.setState("Home State Abbr");

addr.setPincode("Home PinCode");

user.setHomeAddress(addr);


addr = new Address(); // make a new address

addr.setStreet("Office Street");

addr.setCity("Office City");

addr.setState("Office State");

addr.setPincode("Office PinCode");

user.setOfficeAddress(addr); 

当您将地址设置为家庭地址,addr并且用户homeAddress正在引用相同的 Address 对象时,对它的更改将反映在两个地方。


查看完整回答
反对 回复 2021-06-23
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信