I am using jhipster to write a online cake shop.
It has several classes: CakeOrder
, CakeOrderItems
, User
, Cake
, CakeItem
, Address
. CakeOrder
has one User
, one Address
and many CakeOrderItems
.
class CakeOrder looks like this:
@Entity
@Table(name = "cake_order")
public class CakeOrder implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "order_date")
private ZonedDateTime orderDate;
@Column(name = "ship_date")
private ZonedDateTime shipDate;
@Enumerated(EnumType.STRING)
@Column(name = "status")
private CakeOrderStatus status;
@OneToMany(mappedBy = "cakeOrder")
// @JsonIgnore
private Set<CakeOrderItem> cakeOrderItems = new HashSet<>();
@ManyToOne
@JoinColumn(name = "address_id")
private Address address;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
// ...
}
Everything works fine but the createCakeOrder. Here is the code.
/**
* POST /cakeOrders -> Create a new cakeOrder.
*/
@RequestMapping(value = "/cakeOrders",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
//
public ResponseEntity<CakeOrder> createCakeOrder(@RequestBody CakeOrder cakeOrder) throws URISyntaxException {
if (cakeOrder.getId() != null) {
return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert("cakeOrder", "idexists", "A new cakeOrder cannot already have an ID")).body(null);
}
// TODO: use transaction
// Create CakeOrder
CakeOrder result = cakeOrderRepository.save(cakeOrder);
// Create CakeOrderItems belonging to that CakeOrder
for(CakeOrderItem item : cakeOrder.getCakeOrderItems()){
item.setCakeOrder(order);
cakeOrderItemRepository.save(item);
}
return ResponseEntity.created(new URI("/api/cakeOrders/" + result.getId()))
.headers(HeaderUtil.createEntityCreationAlert("cakeOrder", result.getId().toString()))
.body(result);
}
I post the following Json object as an order to that controller.
Here is the order object:
{
"address": {
"id": 1
},
"user": {
"id": 5
},
"cakeOrderItems": [
{
"cakeItem": {
"id": 4
},
"unitPrice": 268,
"quantity": 1
},
{
"cakeItem": {
"id": 10
},
"unitPrice": 175,
"quantity": 1
},
{
"cakeItem": {
"id": 18
},
"unitPrice": 58,
"quantity": 1
}
]
}
Well, here is the problem. In the controller, cakeOrder gets only one CakeOrderItem while there are three in the json object.
Is it a bug or something like misconfiguration? How can I get it work?