当前位置: 首页 > 知识库问答 >
问题:

如何在具有多通关系的表中使用SpringBoot进行post

骆磊
2023-03-14

我有三节课:

产品:

@Entity
@Table(name ="product")
public class Product {

private long product_id;
private String name;
private double priceWithTax;
private String tax;
private String transportPackage;
private double l_kginTP;
private String category;
private Set<EmployeeProduct> employeeProducts=new HashSet<EmployeeProduct>();

public Product() {
    super();
}

@Id
@GeneratedValue
@Column(name = "product_id")
public long getProduct_id() {
    return product_id;
}

public void setProduct_id(long product_id) {
    this.product_id = product_id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public double getPriceWithTax() {
    return priceWithTax;
}

public void setPriceWithTax(double priceWithTax) {
    this.priceWithTax = priceWithTax;
}

@OneToMany(mappedBy = "product")
public Set<EmployeeProduct> getEmployeeProducts() {
    return employeeProducts;
}

public void setEmployeeProducts(Set<EmployeeProduct> employeeProducts) {
    this.employeeProducts = employeeProducts;
}

public String getTax() {
    return tax;
}

public void setTax(String tax) {
    this.tax = tax;
}

public String getTransportPackage() {
    return transportPackage;
}

public void setTransportPackage(String transportPackage) {
    this.transportPackage = transportPackage;
}

public double getL_kginTP() {
    return l_kginTP;
}

public void setL_kginTP(double l_kginTP) {
    this.l_kginTP = l_kginTP;
}

public String getCategory() {
    return category;
}

public void setCategory(String category) {
    this.category = category;
}

员工:

@Entity
@Table(name = "employee")
public class Employee {

private long employee_id;
private String name;
private String lastName;
private Set<EmployeeProduct> employeeProducts = new HashSet<EmployeeProduct>();

public Employee() {
    super();
}


public Employee(long id, String name, String lastName) {
    super();
    this.employee_id = id;
    this.name = name;
    this.lastName = lastName;
}

public void addEmployeeProduct(EmployeeProduct eproduct)
{
    this.employeeProducts.add(eproduct);
}

@Id
@GeneratedValue
@Column(name="employee_id")
public long getEmployee_id() {
    return employee_id;
}

public void setEmployee_id(long employee_id) {
    this.employee_id = employee_id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

@OneToMany(mappedBy="product")
public Set<EmployeeProduct> getEmployeeProducts() {
    return employeeProducts;
}

public void setEmployeeProducts(Set<EmployeeProduct> employeeProducts) {
    this.employeeProducts = employeeProducts;
}   
}

员工产品:

@Entity
@Table(name="EmployeeProduct")
public class EmployeeProduct {

private long employee_product_id;
private Employee employee;
private Product product;
private Date date;
private double quantityTaken;
private double quantityReturn;
private double quantitySale; 

@Id
@GeneratedValue
@Column(name = "employee_product_id")

public long getEmployee_product_id() {
    return employee_product_id;
}

public void setEmployee_product_id(long employee_product_id) {
    this.employee_product_id = employee_product_id;
}


@JsonIgnore
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "employee_id") 
public Employee getEmployee() {
    return employee;
}

public void setEmployee(Employee employee) {
    this.employee = employee;
}

@JsonIgnore
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "product_id")
public Product getProduct() {
    return product;
}

public void setProduct(Product product) {
    this.product = product;
}


@Column(name = "date")
public Date getDate() {
    return date;
}

public void setDate(Date date) {
    this.date = date;
}

public double getQuantitySale() {
    return quantitySale;
}

public void setQuantitySale(double quantitySale) {
    this.quantitySale = quantitySale;
}

public double getQuantityTaken() {
    return quantityTaken;
}

public void setQuantityTaken(double quantityTaken) {
    this.quantityTaken = quantityTaken;
}

public double getQuantityReturn() {
    return quantityReturn;
}

public void setQuantityReturn(double quantityReturn) {
    this.quantityReturn = quantityReturn;
}
}

我有一个控制器类,在那里我有以下帖子:

 @CrossOrigin
    @RequestMapping(value = "/distribution/create", method = RequestMethod.POST)
    public void addEmployee(@RequestBody EmployeeProduct e) {
        EmployeeProduct employeeProduct = new EmployeeProduct();
        employee.setEmployee(e.getEmployee());
        employee.setProduct(e.getProduct());
        employeeService.addEmployee(employeeProduct);
    }

对于setEmployee,我需要设置一个长参数,它是employee_id的外键,但当我发送请求时,我需要发送对象。同样的情况也适用于产品,当我想发送请求时,我需要发送产品的对象,但我想发送产品的外键参数。

{
    "employee_id":1,
    "product_id":1,
    "quantity":5
}

共有1个答案

蒋栋
2023-03-14

假设DB中已经存在员工和产品,您应该首先加载每个相关实体,以便从JPA中为每个实体获取一个附加实体。然后将其设置为主实体。

正确的代码如下所示:

EmployeeProduct employeeProduct = new EmployeeProduct();

Employee employee = employeeRepository.findOne(e.getEmployeeId());
employeeProduct.setEmployee(employee);

Product product= productRepository.findOne(e.getProductId());
employeeProduct.setProduct(product);

employeeService.addEmployee(employeeProduct);
 类似资料:
  • 问题内容: 我正在尝试使用JPA 2.0创建具有通用关系的多态实体。应该有两个表,一个事件表和一个通知表。在这些表内是彼此相关的具体实体,如下所示: 从逻辑上讲,这应该在休眠状态下是可能的,因为在SQL中是可能的: 这就是我所拥有的: 使用此代码,我可以持久保存并获取任何Event,Notification,LoginEvent或NotificationEvent,但是当我尝试在JPA 2.0元模

  • 问题内容: 假设我有两个表:Store和Product。我希望我的商店有产品清单。我怎样才能做到这一点? 我开始这样的事情,但是我不知道该如何完成,你们能帮我吗? 问题答案: 多对一(产品只能有一家商店) 多对多(产品可以在许多商店中使用)

  • 我有两个实体:UserEntity和LoginEntity,每个实体都有CrudePositories。实体之间的关系为OneToOne,其中一个用户将拥有一个登录帐户。我还创建了一个控制器,我可以从数据库中获取所有数据,也就是说,当调用getalluser时,我可以让所有具有关系的用户登录。当我调用getAllLogins时,我会得到所有登录帐户。我还分别使用API插入了用户和登录名,这很好,但

  • 问题内容: 我有2个表,“问题与答案”,具有多对多关系(即,问题可以有多个答案,而“答案”可以被多个“问题”重用)。为了进行标准化,我在它们之间有一个交叉引用表,名为Question_Answer,与这两个表具有多对一关系。这些是它们的类定义: 我正在尝试根据某些条件获得答案列表。这是我的条件查询(使用Grails 函数): 这是我遇到的问题的一个示例: 我有一个匹配3个不同问题的答案。我在“列表

  • 问题内容: 假设我有表,以及: 我想知道如何找到足球(30)和棒球(50)俱乐部中的所有学生。 虽然此查询不起作用,但这是我到目前为止最接近的东西: 问题答案: 我很好奇 众所周知,好奇心以杀死猫而闻名。 那么,哪一种最快的方法是给猫皮呢? 此测试的精确蒙皮环境: *Debian Squeeze上的 *PostgreSQL 9.0 ,具有不错的RAM和设置。 6.000名学生,24.000个俱乐部

  • 问题内容: 有三个表:,并且,医院能提供的医疗服务和语言服务。因此,存在两个多对多关系。 简单ERD 现在,我想使用和搜索医院数据。 DaoImpl: 而且,如果我想从三个表中按邮政编码,医疗类型和语言进行搜索,那么如何编写一个jsql。 警告: 错误:org.hibernate.hql.internal.ast.ErrorCounter- 预期加入的路径!希望加入的路径!在org.hiberna