나는 프론트 엔드에서 왔기 때문에이 모든 것이 나에게 새로운 것입니다. 다음 엔터티가 Client있으며 Cart, Product이러한 엔터티는 다음과 같이 연결되어 있습니다.
Client<=>@OneToOne<=>CartCart=>@OneToMany=>Product(@ManyToOne대Cart)
my SpringDataJpaApplication를 실행 하면 Postgres의 모든 열과 외래 키가있는 3 개의 테이블이 모두 올바르게 생성됩니다. 새로운 만들기 Cart모든 필드와 함께, 모두 만들어집니다 Client및 CartPostgres의의를하지만, 작성하지 않습니다 Product이다 @ManyToOne. 데이터베이스를 쿼리하면 다음에 대한 빈 필드가 생성됩니다.Product
// Client
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
public class Client {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int client_id;
private String name;
private String lastName;
@OneToOne(mappedBy = "client")
private Cart cart;
}
// Cart
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
public class Cart {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int cart_id;
@OneToMany(mappedBy = "cart")
private List<Product> productList;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "fk_client_id", referencedColumnName = "client_id")
private Client client;
}
//Product
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int product_id;
private String productName;
private int price;
private int qty;
@ManyToOne
@JoinColumn(name = "fk_cart_id")
private Cart cart;
}
// CartController
@RestController
public class CartController {
@Autowired
CartRepository cartRepository;
@PostMapping("/createCart")
public Cart createCart(@RequestBody Cart request) {
return cartRepository.save(request);
}
}
언급했듯이 엔드 포인트에 게시하면 및에 200대해서만 생성 된 with 레코드 (위에서 언급 한대로)가 반환 됩니다 . 게시 요청은 다음과 같습니다.ClientCart
{
"productList": [
{
"productName": "mobile",
"price": 800,
"qty": 2
}
],
"client": {
"name": "John",
"lastName": "Done"
}
}
내가 무엇을 잘못하고 있지? Product테이블이 채워 지지 않는 이유는 무엇 입니까? ( 참고 : 단지와 @OneToMany와 @ManyToOne와 Cart와 Product나는 둘 다 채울 수 있어요,하지만이 때 Client믹스에 던져되고, 내가 문제가 위의 describbed이)