将多个@OneToOne关系休眠到同一类对象

all*_*cer 5 java hibernate relationship

我有一个与同一Parcel类有2个关系,但对象不同的实体:

@Entity
public class Parcel implements Serializable
{
    @Id
    @GeneratedValue
    @Column
    private Long id;

    @OneToOne( mappedBy = "parcelSender", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Place sender;

    @OneToOne( mappedBy = "parcelRecipient", cascade = CascadeType.ALL, fetch = FetchType.EAGER )
    private Place recipient;

//getters, setters, etc.
}
Run Code Online (Sandbox Code Playgroud)

Place 实体:

@Entity
public class Place implements Serializable
{
    @Id
    @GeneratedValue
    @Column
    private Long id;

    @OneToOne
    @PrimaryKeyJoinColumn
    private Parcel parcelSender;

    @OneToOne
    @PrimaryKeyJoinColumn
    private Parcel parcelRecipient;

//getters, setters
}
Run Code Online (Sandbox Code Playgroud)

如果看到的话,我@OneToOnePlace对象有2个关系。一切工作几乎都很好-当我使用REST持久化对象时,我得到了发件人和收件人正确的JSON响应。当我想要补丁Parcels对象时,我得到JSON响应,其中发件人和收件人指向相同的数据。例如,我坚持对象:

{
    "sender":{
        "name": "John",
        "email":"othermail@mail.com"
    },
    "recipient":{
        "name": "Mike",
        "email":"mymail@mail.com",       
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到持久化数据的响应:

{
  "id": 1,
  "sender": {
    "id": 4,
    "name": "John",
    "email": "othermail@mail.com"
  },
  "recipient": {
    "id": 3,
    "name": "Mike",
    "email": "mymail@mail.com"
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我想修补Parcel实体中的某些字段时,在JSON reposne中有相同的对象:

我进行了修补(这是包裹编号上方):

{
    "id": 1   
    //some not important data
}
Run Code Online (Sandbox Code Playgroud)

并回应:

{
  "id": 3,
  "sender": {
    "id": 3,
    "name": "Mike",
    "email": "mymail@mail.com"
  },
  "recipient": {
    "id": 3,
    "name": "Mike",
    "email": "mymail@mail.com"
  }
}
Run Code Online (Sandbox Code Playgroud)

这个问题可能很容易,但是我不知道如何解决。我真的不明白为什么我得到相同的对象,即使它们mappedBy的实体不同。我需要对@OneToOne相同的类但对不同的对象有两个关系。是否可以巧妙地解决此问题?