Repository save method returns entity with some null fields

Viewed 69

I send a request with a body:

{
  "name"        : "French fries",
  "ingredients" : [
                    {
                       "id" : 1
                    }
                  ]

}

And receive:

{
  "id"          : 1, 
  "name"        : "French fries", 
  "ingredients" : [
                    {
                      "id"   : 1,
                      "name" : null
                    }
                  ]

}


The id references an ingredient that already exists:

{
  "id"   : 1,
  "name" : "potato"
}
```.
<br/>As you can see, the name of the ingredient in null.
Here's my model:
```java
@Entity
@Table(name = "dishes")
@Data
public class Dish {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonView(Views.Full.class)
    private Long id;

    @Column(unique = true)
    @JsonView(Views.Partial.class)
    private String name;

    @ManyToMany(cascade = CascadeType.MERGE)
    @JoinTable(
            name = "dish_ingredients",
            joinColumns = @JoinColumn(name = "dish_id"),
            inverseJoinColumns = @JoinColumn(name = "ingredient_id"))
    @JsonView(Views.Partial.class)
    private List<Ingredient> ingredients = new ArrayList<>();}
@Data
@Table(name = "ingredients")
@Entity
public class Ingredient {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonView({Views.Full.class, Views.Partial.class})
    private Long id;

    @Column(unique = true)
    @JsonView(Views.Public.class)
    private String name;
}

Here's what I do in service:

public Dish createDish(Dish dish) {
    return dishRepository.saveAndFlush(dish);
}

Controller:

@PostMapping("dishes")
public Dish createDish(@RequestBody @JsonView(Views.Partial.class) Dish dish) {
    return itemService.createDish(dish);
}
0 Answers
Related