在spring-boot中加入两个实体

Posted

技术标签:

【中文标题】在spring-boot中加入两个实体【英文标题】:Joining two entities in spring-boot 【发布时间】:2022-01-22 22:56:20 【问题描述】:

我有一个类别表,它有自己的唯一 ID 和名称, 我有一个产品表,它有自己的唯一 ID、名称、价格和 categoryId。

Category.java

    @Entity
    public class Category 
    
        @Id
        @GeneratedValue
        private long id;
        
        private String name;
        
        @OneToMany(fetch=FetchType.LAZY, mappedBy = "category")
        private Set<Product> products;
        //getters and setters

Product.java

@Entity
public class Product 
    
    @Id
    private long productId;
    
    private String name;
    private double price;
    
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="categoryId")
    private Category category;  
    
    public Product() 
    

    public Product(long productId, String name, double price) 
        super();
        this.productId = productId;
        this.name = name;
        this.price = price;
    

    public long getProductId() 
        return productId;
    
    
    public String getName() 
        return name;
    

    public double getPrice() 
        return price;
    

当我尝试通过 post 方法创建新产品时,我应该能够读取或写入其 categoryId,但我不能。我做错了什么?

【问题讨论】:

“当我尝试通过 post 方法创建新产品时”,“应该能够读取或写入它的 categoryId”,...请显示!!...“但我不能“......请显示/解释......但我已经猜到了:谁设置了id??(什么数据已经在db中?..;) 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

您应该不能编写它的 categoryId,但您需要一个用于 Product.category 的 getter 和一个 setter。要更改产品的类别,您可以使用product.setCategory(newCategory)。如果要读取产品的类别ID,还需要为Category.id添加getter;然后你会这样做:product.getCategory().getId()

【讨论】:

以上是关于在spring-boot中加入两个实体的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JPA JPQL 查询中加入两个实体集合?

如何在 R2DBC 和 Spring WebFlux 中加入多个表?

如何在 symfony 5 中加入两个表?

Spring-boot 启动报错 调试小技巧

如何在 Spring JPA 存储库中加入多个表的结果

如何在 Spring Boot JPA 中加入两个表,我的代码出错了