2013-12-19 64 views
3

我使用hibernateannotation使用Hibernate 4.3MySQL在一對多映射外鍵

有兩個表1. User2. Vehicle

我已經插入用戶primarykeyvehicleforeign key插在Hibernate的MySQL的空mapping顯示在下面的代碼中

用戶等級

@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; 
} 

} 

汽車類

@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; 
} 


} 

主要類

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(); 
} 
} 

輸出:

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 | 
+-----------+-------------+---------+ 

爲什麼User_IDvehicle表將null。它應該是1感謝您的幫助。

回答

4

您需要在保存車輛對象之前明確說出vehicle.setUser

1

變化

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

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(); 

,從這裏

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

user.getVehicle().add(vehicle);  <--- remove 
user.getVehicle().add(vehicle1);  <--- remove 
刪除關聯