【问题标题】:JPA relation between Orders and Employee订单和员工之间的 JPA 关系
【发布时间】:2019-02-23 15:29:45
【问题描述】:

我正在创建一个订单,然后将一名员工分配给该订单。所以我很难在这两者之间建立关系。我的订单表没有更新employee_id 列

我的员工班级

@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);
}

【问题讨论】:

  • 如果将SAVE_UPDATE 更改为ALL 会发生什么?
  • 保存EmployeeOrders的代码是什么?
  • @Andronicus 我确实更改为 ALL,但什么也没发生。
  • 两件事:你确定,你要添加的订单不在吗?您是否覆盖了equalshashCode

标签: java mysql database hibernate jpa


【解决方案1】:
@Entity
public class Employee {

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

} 

mappedBy这里的意思是servedBy中的Orders用来维护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;

} 

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 2021-07-31
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多