无法在hibernate中创建一对多映射表

时间:2016-09-04 14:32:10

标签: java hibernate

我对hibernate很新。我创建了两个实体,如用户和车辆,用户与车辆有一对多的关系。

@OneToMany
@JoinColumn(name="Vehicle_id")
Collection<Vehicle> vehicle = new ArrayList<>();

并将它们添加到像这样的表

UserInfo user = new UserInfo();
user.setUsername(username);
user.setPassword(password);
user.setDob(dob);

Vehicle vehicle = new Vehicle();
vehicle.setVehicleName("AUdi");
user.getVehicle().add(vehicle);

Vehicle vehicle2 = new Vehicle();
vehicle2.setVehicleName("BMW");
user.getVehicle().add(vehicle2);

SessionFactory sessionfactory = new AnnotationConfiguration().configure().buildSessionFactory();
Session session = sessionfactory.openSession();
session.beginTransaction();
session.save(user);
session.save(vehicle);
session.save(vehicle2);
session.getTransaction().commit();
session.close();

但我得到了像

这样的结果
Hibernate: insert into UserInformation (user_name, DOB) values (?, ?)
Hibernate: insert into Vehicle (vehicleName) values (?)
Hibernate: insert into Vehicle (vehicleName) values (?)
Hibernate: update Vehicle set Vehicle_id=? where vehicleID=?
Hibernate: update Vehicle set Vehicle_id=? where vehicleID=?

没有创建像

这样的表格
insert into User_vehicle(User_id,vehicle_id) Values (?,?)

所以我没有在db。

中获得任何表名User_vehicle

希望你理解我的问题。

1 个答案:

答案 0 :(得分:1)

您已为@JoinColumn关联指定了@OneToMany,因此多方会有一个外键列。这实际上是推荐的方法。

如果您需要为@OneToMany关联使用连接表,则需要省略@JoinColumn并可选择指定@JoinTable以覆盖表和列的默认名称:

@OneToMany
@JoinTable(
    name="User_Vehicle",
    joinColumns = @JoinColumn(name = "User_Id"),
    inverseJoinColumns = @JoinColumn(name = "Vehicle_Id")
)
Collection<Vehicle> vehicles = new ArrayList<>();