В моем собственном проекте я использую Angular 6 для разработки веб-интерфейса и Spring Boot 2 для разработки бэкэнда. Бэкэнд использует Spring Boot JPA для подключения к базе данных Postgres, также я использую Spring Boot Rest для создания API, используя конечные точки по умолчанию, созданные Spring Boot Rest. Таким образом, нет ручных услуг или контроллеров.
У меня есть Person-Entity и Address-Entity с отношением oneToOne. Все сущности расширяют BaseEntity:
@Data
@MappedSuperclass
@OptimisticLocking(type = OptimisticLockType.DIRTY)
@EntityListeners({AuditingEntityListener.class})
public class BaseEntity {
@Id
@GeneratedValue(generator = "uuid2", strategy = GenerationType.AUTO)
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Type(type = "uuid-binary")
private UUID id;
@CreatedDate
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@CreatedBy
private String createdBy;
@LastModifiedDate
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@LastModifiedBy
private String lastModifiedBy;
}
лицо
@Data
@Entity
@Table(name = "person")
public class Person extends BaseEntity {
private String lastName;
private String firstName;
}
Адрес
@Data
@Entity
@Table(name = "address")
public class Address extends BaseEntity {
@OneToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
@MapsId
private Person person;
private String street;
private String houseNumber;
private String zipCode;
private String city;
private String state;
}
Мои репозитории выглядят так:
public interface AddressRepository extends CrudRepository<Address, UUID> {
}
и
public interface PersonRepository extends CrudRepository<Person, UUID> {
}
При публикации
{
"street":"exStreet",
"housenumber":"121",
"zipcode":"14321",
"city":"exCity",
"state":"exState",
"person":{
"lastName":"ExampleLastName",
"firstName":"ExampleFirstName"}
}
до http://localhost:8080/addresses Я всегда получаю следующую ошибку
org.springframework.orm.jpa.JpaSystemException: попытка присвоить идентификатор
из нулевого однозначного свойства [Address.person];
вместе с
org.hibernate.id.IdentifierGenerationException: попытка присвоить идентификатор
из нулевого однозначного свойства [Address.person]
Похоже, что сервер не сохраняет персоны-сущности, и хотя нет никакого идентификатора, который можно использовать для сохранения адреса-сущности.
Я пытаюсь добиться этого:
frontend: angular form => service => вызов httpclient с показанным json => post to spring boot api server // работает, я думаю
backend: сервер api с весенней загрузкой, десериализация json для адреса и person-entity => address.setPerson (person) => сохранение через jpa в базу данных
Есть ли способ достичь этого с помощью какой-то настройки Джексона или чего-то в этом роде, или мне снова нужно написать службы для контроллеров, позаботиться о связывании, ...?
Вот уже два дня я борюсь с этим, поэтому любая помощь очень ценится.
EDIT
После дальнейшего расследования я уверен, что проблема заключается в картировании. Но я не знаю, как комментировать мои сущности или какую конфигурацию необходимо выполнить.