繁体   English   中英

Spring 启动 JPA 一对多双向外键为 null

[英]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;

两个字段accountaccountId具有相同的名称,我猜这不会发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM