У меня есть 2 стола & Vehicle
, где один сотрудник может иметь несколько транспортных средств. Ниже отображение, что я определил:Hibernate - Иностранный ключ пуст при использовании mappedBy
Employee.java
@Entity(name = "emp_details")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int empId;
@OneToMany(cascade = CascadeType.ALL, mappedBy="employee")
private List<Vehicle> vehicles = new ArrayList<>();
public int getEmpId() {
return empId;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public List<Vehicle> getVehicles() {
return vehicles;
}
public void setVehicles(List<Vehicle> vehicles) {
this.vehicles = vehicles;
}
}
Vehicle.java
@Entity
public class Vehicle {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int vehicleId;
@ManyToOne
@JoinColumn(name="empId")
private Employee employee;
private String name;
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public int getVehicleId() {
return vehicleId;
}
public void setVehicleId(int vehicleId) {
this.vehicleId = vehicleId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Основной класс
public class HibernateTest {
public static void main(String[] args) {
Employee emp = new Employee();
Vehicle vehicle = new Vehicle();
vehicle.setName("Honda");
emp.getVehicles().add(vehicle);
SessionFactory sFactory = new Configuration().configure().buildSessionFactory();
Session session = sFactory.openSession();
session.beginTransaction();
session.save(emp);
session.getTransaction().commit();
session.close();
StandardServiceRegistryBuilder.destroy(sFactory.getSessionFactoryOptions().getServiceRegistry());
}
}
Но когда я выполняю это, Vehicle.employee_id пуст. Я ожидал, что мой внешний ключ будет вставлен туда.
Что мне не хватает?
Спасибо
Нельзя каскадировать от транспортного средства к сотруднику. Всегда каскадируйте только в одном направлении. – kaba713