【问题标题】:How to set value of related entities(objects)如何设置相关实体​​(对象)的值
【发布时间】:2023-03-07 17:30:02
【问题描述】:

我有两个具有关系的实体,关系工作正常,但是如何在控制器中将值从一个对象设置为另一个对象。

@Entity
@Table(name = "material_manu_calculator")
public class MaterialManuCalcu {

@Id
@GeneratedValue
@Column(name = "no")
private int no;

@ManyToOne
@JoinColumn(name = "order_id")
private OrderProductManu orderProductManu;

 //.....getters and setters and constructors}

下面是第二个实体

@Entity
@Table(name = "orders_products_manu")
public class OrderProductManu {

@Id
@GeneratedValue
@Column(name = "order_id")
private int orderManuId;

@OneToMany(cascade = CascadeType.ALL,mappedBy = "orderProductManu")
private List<MaterialManuCalcu> materialCalcu = new ArrayList<>();

 //.....getters and setters and constructors}


                                 

下面是仓库

   @Repository
   @Transactional
   public interface OrderProductManuRepository extends JpaRepository <OrderProductManu, Integer> {

   @Query(value  ="SELECT *FROM orders_products_manu  WHERE orders_products_manu.order_id =?", nativeQuery = true)
   public OrderProductManu getOrderProductById(int id);
   }

我想在控制器中设置 MaterilaManuCalcu 的值如下

@Controller
public class ProductsController {
@Autowired
private OrderProductManuRepository orderRepo;

   OrderProductManu orderProduct = orderRepo.getOrderProductById(1);

   MaterialManuCalcu manCalc = new MaterialManuCalcu();
   manCalc.setOrderProductManu(orderProduct.getOrderManuId()); 
   // I get the error says: 
   //    The method setOrderProductManu(OrderProductManu) in 
   //    the type MaterialManuCalcu is not applicable for the arguments (int)

更新:构造函数

    public MaterialManuCalcu(int no, int amountOrdered, int amountAvailable, int amountWillRemain,
        MaterialManu materialmanu, OrderProductManu orderProductManu) {
    this.no = no;
    this.amountOrdered = amountOrdered;
    this.amountAvailable = amountAvailable;
    this.amountWillRemain = amountWillRemain;
    this.materialmanu = materialmanu;
    this.orderProductManu = orderProductManu;
}

另一个

public OrderProductManu(int orderManuId, String customerName, int amountOrderedManu, String dateOrdered, Users users,
ProductsManu productsManu) {
this.orderManuId = orderManuId;
this.customerName = customerName;
this.amountOrderedManu = amountOrderedManu;
this.dateOrdered = dateOrdered;
this.users = users;
this.productsManu = productsManu;
}

更新:显示两个实体的创建方式

对于:OrderProductManu

   OrderProductManu orderProduct = new OrderProductManu();
   orderProduct.setDateOrdered("2021-04-14");
   orderProduct.setAmountOrderedManu(platenum);
   orderProduct.setCustomerName("Wapili Mteja");
   orderProduct.setUsers(userMoja.get(0));
   orderProduct.setProductsManu(typeofProduct);
   orderProductManus.setOrderManuId(007);//this is the value that I want to set inside 
   //MateriaManCalcu entity for property setOrderProductManu
   //You can check the relationship above

适用于:MaterialManuCalcu

   MaterialManuCalcu manCalc = new MaterialManuCalcu();
   manCalc.setAmountAvailable(availableSheets);
   manCalc.setAmountOrdered(sheetsNum);
   manCalc.setAmountWillRemain(sheetWillRemain);
   manCalc.setMaterialmanu(materialSheet);
   manCalc.setOrderProductManu(orderProduct);//doing this the whole object of 
   //orderProduct entity goes inside a one column in our MatrialManuCalcuof entity 

表格:ma​​terial_manu_calculator

我应该如何正确地做到这一点。提前致谢。

【问题讨论】:

    标签: java spring spring-boot spring-mvc jpa


    【解决方案1】:

    您正在尝试将通过调用int 类型的orderProduct.getOrderManuId() 返回的orderProduct 的ID 设置为OrderProductManu 类型的变量。 像这样manCalc.setOrderProductManu(orderProduct)

    【讨论】:

    • 上述方法有效,但问题是两个实体都有更多属性,如添加的构造函数中所示。因此,当我按照您的建议设置时,进入数据库的值如下所示:OrderProductManu [amountOrderedManu=67.0, customerName=Wapili Mteja, dateOrdered=2021-04-14, orderManuId=10, productsManu=ProductsManu [productManuId= 1、productManuName=pooltable plate], users=Users [userId=1, userName=Dada Lydia]] 。虽然我尝试只发送 orderManuId=10
    • 在 html 中使用 thymealf 引擎,我可以像这样成功地执行它:${orderProduct.orderManuId},不幸的是我现在需要在控制器而不是 html 中执行它。
    • 我不明白你想在控制器中做什么。如果要保存新的 MaterialManuCalcu 实体,上述解决方案将正常工作。或者你还有什么意思?
    • 是的,我想从对象OrderProductManu 中保存一个属性orderManuId=10,该对象也有许多新MaterialManuCalcu 对象的属性,但不是所有属性。正如我建议的那样,如果我这样做 manCalc.setOrderProductManu(orderProduct) 对象 orderProduct 的所有属性都已设置,而我只需要一个属性 orderManuId=10 。如何在不出现类型不匹配的情况下执行此操作。提前感谢@Looken
    • 如果您真的只想将 MaterialManuCalc 实体保存到数据库,设置 manCalc.setOrderProductManu(orderProduct) 将设置为新记录值 material_manu_calculator.order_id = 10。另外,在您的情况下,我不明白您是如何获得 orderManuId是 10,因为它应该与您在存储库 getOrderProductById(int id) 的此方法中传递的值相同。数据库中的 order_id 与实体类中的 orderManuId 相同
    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多