JPA отношения между заказами и сотрудником - PullRequest
0 голосов
/ 23 февраля 2019

Я создаю заказ, а затем назначаю сотрудника этому заказу.Так что у меня возникли проблемы с установлением отношений между этими двумя.Моя таблица заказов не обновляет столбец 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);
}

1 Ответ

0 голосов
/ 23 февраля 2019
@Entity
public class Employee {

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

} 

mappedBy здесь означает, что servedBy в Orders используются для поддержания взаимосвязи между Employee и Order, что означает, что 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 's @Cascade:

@Entity
public class Employee {

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

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...