Sou novo no Spring Data REST e depois de criar com sucesso algumas entidades, estou enfrentando um problema. Eu tenho uma tabela shopping_list que contém alguns shopping_list_products, shopping_list_product tem uma relação com shopping_list, tudo isso dentro de um banco de dados mysql. O problema é que quando tento criar uma lista de compras com alguns produtos dentro, a lista é criada, mas não os produtos. Na resposta posso ver os produtos com id "null".
Estas são as classes (evitando getters / setters):
Lista de compras:
@Entity
@Table(name = "shopping_list")
public class ShoppingList {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private Date creationDate;
@RestResource(exported=false)
@OneToMany(mappedBy="shoppingList")
private List<ShoppingListProduct> shoppingListProducts;
ShoppingListProduct:
@Entity
@Table(name = "shopping_list_products")
public class ShoppingListProduct {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private boolean checked;
@ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "shopping_list_id")
private ShoppingList shoppingList;
E foi o que aconteceu quando tentei inserir alguns produtos com carteiro:
Eu insiro isto:
{
"name" : "name",
"creationDate" : "2018-12-12",
"shoppingListProducts" : [
{
"name" : "product 1",
"checked" : false
},
{
"name" : "product 2",
"checked" : true
}
]
}
E recebo uma resposta 201 (criada) com este resultado:
{
"name": "name",
"creationDate": "2018-12-12",
"shoppingListProducts": [
{
"name": "product 1",
"checked": false,
"resourceId": null
},
{
"name": "product 2",
"checked": true,
"resourceId": null
}
],
"resourceId": 60,
"_links": {
"self": {
"href": "http://localhost:8080/shoppingLists/60"
},
"shoppingList": {
"href": "http://localhost:8080/shoppingLists/60"
}
}
}
Como você pode ver, o resourceId criado para os produtos em shoppingList é nulo e, se eu for para o banco de dados, nenhum produto será criado.
Não consigo encontrar qual é o problema, então eu realmente aprecio sua ajuda.
Obrigado!
Bem, graças a @BillyFrost eu adicionei uma cascata em @OneToMany e depois disso recebi um erro 500 dizendo que shopping_list_id não pode ser nulo. Então, editei o setter de shoppingListProducts configurando a lista de compras atual, assim:
public void setShoppingListProducts(List<ShoppingListProduct> shoppingListProducts) {
for (ShoppingListProduct sp : shoppingListProducts) {
sp.setShoppingList(this);
}
this.shoppingListProducts = shoppingListProducts;
}
E agora funcionou!
Muito obrigado por sua ajuda!
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras