Я достаточно зеленый с концепцией абстрактного моделирования данных, поэтому я пытаюсь создать API с использованием Spring Boot, включая String Boot Starter Data JPA, который использует Hibernate / Javax персистентность.
То, что я пытаюсь сделать, - это возможность отправлять запросы через REST (используя Почтальон для тестирования). У меня это работает для обычных POJO, но у меня есть JoinColumn, все становится немного грушевидным.
Например, у меня есть следующее:
@Entity
@Table( name = "customer_tbl" )
public class Customer
{
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
private long customerId;
@Column( name = "customer_name", nullable = false, unique = true )
private String customerName;
... в качестве родителя, со следующим потомком ...
@Entity
@Table( name = "scheme_tbl" )
public class Scheme
{
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
private long schemeId;
@ManyToOne( fetch = FetchType.LAZY, optional = false )
@PrimaryKeyJoinColumn( name = "customer_id" )
@OnDelete( action = OnDeleteAction.CASCADE )
@JsonProperty( "customer" )
@NotNull
private Customer customer;
@Column( name = "scheme_name", nullable = false, unique = true )
private String schemeName;
Идея состоит в том, что для каждого customer
может быть много scheme
записей.
Я хотел бы опубликовать scheme
объект через REST со ссылкой на родительский элемент customer
, к которому будет принадлежать scheme
, например,
{
"customer": {
"customer_id" : "1",
"customerName" : "TestCustomer"
},
"schemeName": "TestScheme"
}
(я пробовал много вариантов customer
в этом)
Я перепробовал все, с customer
, равным null
в @RequestBody
, пока я не добавил в @JsonProperty
. Это признается на @RequestBody
как законченный customer
объект, но на самом деле это не нравится, и выдает исключение unsaved transient entity
. Теперь проблема в том, что он по-прежнему не выполняет то, что я надеюсь достичь - передавая ссылку на клиента, в результате которой столбец customer_id
устанавливается должным образом (или сопоставление выполняется с помощью fk / lookup).
Возможно ли это с REST? У меня была похожая работа с методами класса, просто установив ${customerId}
в форме, используя Thymeleaf, который также возвращает объект scheme
и счастливо сохраняется