gpt4 book ai didi

java - Orders 和 Employee 之间的 JPA 关系

转载 作者:搜寻专家 更新时间:2023-10-30 22:24:45 26 4
gpt4 key购买 nike

我正在创建一个订单,然后为该订单分配一名员工。所以我在建立这两者之间的关系时遇到了麻烦。我的订单表没有更新 employee_id 列

我的 Employee 类

@Entity
public class Employee {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private String name;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "servedBy")
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
private List<Orders> orders;
...
}

我的订单类

@Entity
public class Orders {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Embedded
private OrderStatus orderStatus;


@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "employee_id")
private Employee servedBy;
...
}

我试图映射这两个的代码

public void orderServed(Long employeeId, Long orderId)  {
Orders order = orderRepository.findOne(orderId);
Employee employee = employeeRepository.findOne(employeeId);
List<Orders> orders = employee.getOrders();
orders.add(order);
employee.setOrders(orders);
employeeRepository.save(employee);
}

最佳答案

@Entity
public class Employee {

@OneToMany(fetch = FetchType.LAZY, mappedBy = "servedBy")
private List<Orders> orders;

}

mappedBy这里是指Orders中的servedBy用来维护EmployeeOrder之间的关系 ,这意味着 Hibernate 将根据该字段更新外键。您必须在 Order 中设置 servedBy 的值来指定关系,而不是在 Employee 中使用 orders :

public void orderServed(Long employeeId, Long orderId)  {
Orders order = orderRepository.findOne(orderId);
Employee employee = employeeRepository.findOne(employeeId);

//Set the forign key
order.setServedBy(employee);

employeeRepository.save(employee);
}

顺便说一句,@OneToMany 已经允许配置级联行为。无需使用 hibernate 的 @Cascade :

@Entity
public class Employee {

@OneToMany(fetch = FetchType.LAZY, mappedBy = "servedBy" , cascade={CascadeType.ALL})
private List<Orders> orders;

}

关于java - Orders 和 Employee 之间的 JPA 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54843135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com