订单和员工之间的JPA关系

问题描述 投票:1回答:1

我正在创建订单,然后将员工分配给该订单。所以我很难在这两者之间建立关系。我的订单表不会更新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);
}
java mysql database hibernate jpa
1个回答
2
投票
@Entity
public class Employee {

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

} 

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

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;

} 
© www.soinside.com 2019 - 2024. All rights reserved.