[英]Spring Boot JPA one-to-many bidirectional foreign key is null
我有两个实体帐户和订单,其中一个帐户可以有一个或多个订单。 我希望能够登录一个帐户,然后为该帐户下订单。 每当我为现有帐户发布订单时,所有内容都会正确填写,但“account_id”(外键)。 我想知道为什么“account_id”是 null 以及我能做些什么来解决这个问题,谢谢。
这是Account 实体:
@Entity
@Table(name="account")
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private long id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="email")
private String email;
@Column(name="user_name")
private String userName;
@Column(name="password")
private String password;
@Column(name="address")
private String address;
@Column(name="city")
private String city;
@Column(name="state")
private String state;
@Column(name="country")
private String country;
@Column(name="zipcode")
private String zipcode;
@Column(name="credit_card_number")
private String creditCardNumber;
@Column(name="credit_card_code")
private int creditCardCode;
@Column(name="credit_card_name")
private String creditCardName;
@Column(name="credit_card_expiration_month")
private int creditCardExpirationMonth;
@Column(name="credit_card_expiration_year")
private int creditCardExpirationYear;
@OneToMany(mappedBy = "account", cascade = CascadeType.ALL)
private List<Order> orders;
/* constructor */
/* Getters and setters */
这是订单实体:
@Entity
@Table(name="orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private long id;
@Column(name="total_price")
private int totalPrice;
@Column(name="total_quantity")
private int totalQuantity;
@Column(name="date_created")
@CreationTimestamp
private Date dateCreated;
@Column(name="shipping_address")
private String shippingAddress;
@ManyToOne
@JoinColumn(name = "account_id",nullable = false, insertable = false, updatable = false)
private Account account;
@Column(name = "account_id")
private long accountId;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "order")
private Set<OrderItem> orderItems = new HashSet<>();
/* constructor */
/* Getters and setters */
这是订单存储库
public interface OrderRepository extends JpaRepository<Order, Long> {
Page<Order> findByAccountId(@Param("id") Long id, Pageable pageable);
}
这是订单 Controller
@RestController
@RequestMapping("/api")
public class OrderController {
@Autowired
private OrderRepository orderRepository;
@PostMapping("/save-order")
public Order saveOrder(@RequestBody Order order) {
return orderRepository.save(order);
}
}
这是postman 后订购
URL: "http://localhost:8080/api/save-order"
{
"totalPrice": 10.17,
"totalQuantity": 3,
"dateCreated": "2022-09-05",
"shippingAddress": "123 Road, London, United Kingdom",
"account": [{
"id": 1,
"firstName": "Winston",
"lastName": "Smith",
"email": "smith22@gmail.com",
"userName": "wilsonsmith22",
"password": "mypassword22",
"address": "123 Road",
"city": "London",
"state": "London Region",
"country": "United Kingdom",
"zipcode": "220220",
"creditCardNumber": "4422336644885500",
"creditCardCode": 234,
"creditCardName": "Winston Smith",
"creditCardExpirationMonth": 5,
"creditCardExpirationYear": 2025
}]
}
你有:
@ManyToOne
@JoinColumn(name = "account_id",nullable = false, insertable = false, updatable = false)
private Account account;
@Column(name = "account_id")
private long accountId;
两个字段account
和accountId
具有相同的名称,我猜这不会发生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.