简体   繁体   English

在OneTOMany中,映射外键在Hibernate-MySQL中作为null插入

[英]in OneTOMany mapping foreign key is inserted as null in Hibernate-MySQL

I am using Hibernate 4.3 and MySQL 我正在使用Hibernate 4.3MySQL

There two tables 1. User and 2. Vehicle 有两个表1. User2. Vehicle

I have inserted User's primary key in vehicle as a foreign key using hibernate annotation mapping shown in follwing code 我使用后面的代码中显示的hibernate annotation mapping将User的primary key作为foreign key插入到vehicle

User class 用户类

@Entity 
@Table(name = "USER_DETAILS")
public class UserDetails {

@Id
@Column (name="USER_ID")
private int userId;
@Column (name="USER_NAME")
private String userName;
@OneToMany(mappedBy="user")
private Collection<Vehicle> vehicle = new ArrayList<Vehicle>();

public int getUserId() {
    return userId;
}
public Collection<Vehicle> getVehicle() {
    return vehicle;
}
public void setVehicle(Collection<Vehicle> vehicle) {
    this.vehicle = vehicle;
}
public void setUserId(int userId) {
    this.userId = userId;
}
public String getUserName() {
    return userName;
}
public void setUserName(String userName) {
    this.userName = userName;
}

}

Vehicle class 车辆类

@Entity
public class Vehicle {

@Id
private int vehicleId;
private String vehicleName;
@ManyToOne
@JoinColumn(name="USER_ID")
private UserDetails user;

public UserDetails getUser() {
    return user;
}
public void setUser(UserDetails user) {
    this.user = user;
}
public String getVehicleName() {
    return vehicleName;
}
public void setVehicleName(String vehicleName) {
    this.vehicleName = vehicleName;
}
public int getVehicleId() {
    return vehicleId;
}
public void setVehicleId(int vehicleId) {
    this.vehicleId = vehicleId;
}


}

Main class 主要课程

public class HibernateMain {

public static void main(String[] args) {

    UserDetails user = new UserDetails();
    user.setUserId(1);
    user.setUserName("Second user");

    Vehicle vehicle = new Vehicle();
    vehicle.setVehicleId(1);
    vehicle.setVehicleName("car");

    Vehicle vehicle1 = new Vehicle();
    vehicle1.setVehicleId(2);
    vehicle1.setVehicleName("jeep");

    user.getVehicle().add(vehicle);
    user.getVehicle().add(vehicle1);

    Configuration cfg = new Configuration().configure("hibernate.cfg.xml");

    SessionFactory sf = cfg.buildSessionFactory(new ServiceRegistryBuilder()
                           .applySettings(cfg.getProperties()).build());

    Session session = sf.openSession();
    session.beginTransaction();
    session.save(user);
    session.save(vehicle);
    session.save(vehicle1);
    session.getTransaction().commit();
    session.close();
}
}

Output: 输出:

mysql> select * from user_details;

+---------+-------------+
| USER_ID | USER_NAME   |
+---------+-------------+
|       1 | Second user |
+---------+-------------+
mysql> select * from vehicle;
+-----------+-------------+---------+
| vehicleId | vehicleName | USER_ID |
+-----------+-------------+---------+
|         1 | car         |    NULL |
|         2 | jeep        |    NULL |
+-----------+-------------+---------+

Why User_ID in vehicle table is going null . 为什么vehicle表中的User_IDnull It should be 1 . 它应该是1 Thanks for help. 感谢帮助。

在保存车辆对象之前,您需要明确说出vehicle.setUser

change 更改

Session session = sf.openSession();
session.beginTransaction();
session.save(user);
session.save(vehicle);
session.save(vehicle1);
session.getTransaction().commit();
session.close();

to

Session session = sf.openSession();
session.beginTransaction();
session.save(vehicle);
session.save(vehicle1);
user.getVehicle().add(vehicle);
user.getVehicle().add(vehicle1);
session.save(user);
session.getTransaction().commit();
session.close();

And remove the association from here 并从此处删除关联

vehicle1.setVehicleId(2);
vehicle1.setVehicleName("jeep");

user.getVehicle().add(vehicle);      <--- remove
user.getVehicle().add(vehicle1);     <--- remove 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM