gpt4 book ai didi

java - Hibernate - 使用mappedBy时外键为空

转载 作者:行者123 更新时间:2023-12-01 21:22:40 25 4
gpt4 key购买 nike

我有 2 个表EmployeeVehicle,其中一名员工可以拥有多辆车。下面是我定义的映射:

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 为空。我期望我的外键将被插入那里。

enter image description here

我错过了什么?

谢谢

最佳答案

您需要向我们展示保存您的实体的代码,但我的猜测是您没有将 employee 设置为 vehicle

您需要管理双向实体关系的双方。您的代码应该如下所示

employee.getVehicles().add(vehicle);
vehicle.setEmployee(employee);

session.save(employee);

更新:

在本例中,Vehicle 是关系的拥有方,因为外键位于其数据库表中。您刚刚将新车添加到员工的车辆列表中。当您保存员工时,Employee的数据库中没有任何内容可以更改,并且保存操作会级联到Vehicle 。 Vehicle 没有设置员工,为 null,因此将 null 放入 empId

底线,您必须确保双向关系的双方都正确连接。

关于java - Hibernate - 使用mappedBy时外键为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38891442/

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