У меня есть две сущности с двунаправленным отношением ManyToOne . Когда я пытаюсь сохранить объект с вложенным объектом, свойство с тем же именем заменяется.
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String firstName;
private String lastName;
private String name;
@OneToMany(mappedBy = "person")
private Collection<Phone> phones;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Collection<Phone> getPhones() {
return phones;
}
public void setPhones(Collection<Phone> phones) {
this.phones = phones;
}
}
@Entity
public class Phone {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String number;
private String name;
@ManyToOne
private Person person;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
И соответствующие репозитории, расширяющие PagingAndSortingRepository с @ RepositoryRestResource аннотациями.
Персона и Телефон сущности имеют общее имя свойство. Когда я создаю новый телефон (сторона владельца в отношении ManyToOne ) отправка запроса POST на http://localhost:8080/phones с полезной нагрузкой
{
"number": "456765",
"name": "Alcatel",
"person": {
"firstName": "Tom",
"lastName": "Hanks",
"name": "Tom Hanks"
}
}
Я знаю, что это не такотношения обновляются в REST, но во внешнем интерфейсе я использую Angular, и там у меня есть что-то вроде вспомогательных полей, например. person в Phone класс машинописи, и я не хочу обнулять его перед отправкой.
Я получаю ответ с переопределенным name property
{
"number": "456765",
"name": "Tom Hanks",
"_links": {
"self": {
"href": "http://localhost:8080/phones/3"
},
"phone": {
"href": "http://localhost:8080/phones/3"
},
"person": {
"href": "http://localhost:8080/phones/3/person"
}
}
}
Конечно, я мог бы добавить @ JsonIgnore аннотацию к setPerson метод в Phone class или просто обнулить свойство person при отправке JSON, и оно будет работать правильно, но мне интересно, почему это происходит?