我最近开始学习Hibernate并使用Map。在我的场景中,我有一个可以拥有多辆车的用户。在进行双向Map时,在第二个表中生成的列,因为如果这个双向Map,我会得到空值。我尝试调试但没有用。
UserDetails.java
package org.hibernate.OneToMany;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table (name = "USER_DETAILS")
public class UserDetails {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@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 Collection<Vehicle> getVehicle() {
return vehicle;
}
public void setVehicle(Collection<Vehicle> vehicle) {
this.vehicle = vehicle;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
字符串
Vehicle.java
package org.hibernate.OneToMany;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class Vehicle {
@Id
@GeneratedValue
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 int getVehicleId() {
return vehicleId;
}
public void setVehicleId(int vehicleId) {
this.vehicleId = vehicleId;
}
public String getVehicleName() {
return vehicleName;
}
public void setVehicleName(String vehicleName) {
this.vehicleName = vehicleName;
}
}
型
HibernateTestOneToMany.java
package org.hibernate.OneToMany;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateTestOneToMany {
public static void main(String[] args) {
UserDetails user = new UserDetails();
user.setUserName("First User");
Vehicle vehicle = new Vehicle();
vehicle.setVehicleName("Audi");
Vehicle vehicle2 = new Vehicle();
vehicle2.setVehicleName("Jeep");
user.getVehicle().add(vehicle);
user.getVehicle().add(vehicle2);
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(user);
session.save(vehicle);
session.save(vehicle2);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
型
产出:
的数据
另外,我发现它有点难以理解,为什么我们应该更喜欢双向Map,而不是单向Map。
2条答案
按热度按时间waxmsbnn1#
您必须在测试中示例化的Vehicle对象中设置用户。
mum43rcc2#
如果有人使用spring Boot :我也尝试使用双向方法填充外键列,但我只得到null。如果我使用@OneToMany annotation,那么默认情况下会使用单向方法创建一个新表。我使用@JoinColumn对列使用@OneToMany annotation和单向方法,那么我只得到2个正确填充外键列的表。
字符串