首页 > 解决方案 > 在春季启动中使用@Onetomany @JoinColumn 进行一对多关联?

问题描述

我是 Spring Boot 和 Web 开发的初学者,并尝试使用 Onetomany 和 joincolumn 注释进行一对多关联映射。

在我的应用程序中,有 2 个实体类有 User 和 ProductDetail,我正在尝试在它们之间进行一对多关联。我期望 user-id 作为 ProductDetail 表中的外键。

运行程序时没有错误,当我将 JSON 语句作为输入传递给邮递员中的应用程序时,但是当我看到我的 MySql 数据库以查看是否发生映射时,用户 ID 未映射为外键在 ProductDetail 表中。

我在下面发布实体类和其他类.....

请帮助我真的被卡住了请让我知道我出了什么问题(我知道我错过了我自己无法弄清楚的非常小的东西)

用户等级:-

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
public class User {

    @Id
    @GeneratedValue
    int id;
    String name;
    String gender;
    String emailId;

    @OneToMany(targetEntity = ProductDetail.class,cascade = CascadeType.ALL)
    @JoinColumn(name="up_fk",referencedColumnName = "id")
    private List<ProductDetail> userpurchase;

}

ProductDetail类:-

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
public class ProductDetail
{
    @Id
    private int productid;
    private String productname;
    private  int cost;
}

控制器类:-

@RestController
@RequestMapping("/Ecommerce")
public class UserController
{
    @Autowired
    private ProductService productservice;
    @Autowired
    private ProductRepository productRepository;
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/products")
    public List<ProductDetail> ShowProducts()
    {
        return productservice.getProducts();
    }

    @PostMapping("/PlaceOrder")
    public User placeOrder(@RequestBody OrderRequest request)
    {
        return userRepository.save(request.getUser());
    }
}

OrderRequest:- 仅包含我们从中提取用户对象的用户对象的类,它将包含产品列表..

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class OrderRequest
{
    private User user;
}

application.properties 文件:-

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ecommerceapi
spring.datasource.username=root
spring.datasource.password=deep
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto =update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

标签: spring-bootspring-data-jpa

解决方案


正确的名字是userpurchase,不是ProductDetail

{
  "user": {
    "name": "deep",
    "gender": "male",
    "emailId": "d@gmail.com",
    "userpurchase": [
      {
        "productid": 2,
        "productname": "laptop",
        "cost": 50000
      },
      {
        "productid": 3,
        "productname": "earphone",
        "cost": 500
      }
    ]
  }
}

推荐阅读