从 Hibernate 中的 JoinTable 中检索所有记录
Posted
技术标签:
【中文标题】从 Hibernate 中的 JoinTable 中检索所有记录【英文标题】:Retrieve all Records from JoinTable in Hibernate 【发布时间】:2020-05-04 17:41:19 【问题描述】:我是 Hibernate 的新手,我正在学习关系映射。我对双向 OneToMany 关系有疑问。我有两个类:人员和车辆。我使用@JoinTable
注解创建了第三个表person_vehicle
。
问题:如何将 joinTable 中的所有数据放入 List。我想在tableview中显示它们,但我的问题是joinTable的数据是什么类型的?
我的解决方案:
Query query = session.createNativeQuery("select * from person_vehicle");
List<Object[]> list = query.getResultList();
@Entity
public class Person
@Id
Integer id;
String name;
@OneToMany(mappedBy = "person")
List<Vehicle> vehicleliste=new ArrayList<Vehicle>();
public void removeVehicle(Vehicle vehicle)
getVehicleliste().remove(vehicle);
vehicle.setPerson(null);
public void addVehicle(Vehicle vehicle)
getVehicleliste().add(vehicle);
vehicle.setPerson(this);
public List<Vehicle> getVehicleliste()
return vehicleliste;
public void setVehicleliste(List<Vehicle> vehicleliste)
this.vehicleliste = vehicleliste;
public Person(Integer id, String name)
this.id = id;
this.name = name;
public Person()
super();
public Integer getId()
return id;
public void setId(Integer id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
@Override
public String toString()
return "Person [id=" + id + ", name=" + name + "]";
@Entity
public class Vehicle
@Id
Integer vid;
String name;
@ManyToOne
@JoinTable(name = "person_vehicle", joinColumns = @JoinColumn(name="vehicleid",referencedColumnName = "vid"),
inverseJoinColumns = @JoinColumn(name="personid",referencedColumnName = "id"))
Person person;
public Integer getVid()
return vid;
public void setVid(Integer vid)
this.vid = vid;
public Person getPerson()
return person;
public void setPerson(Person person)
this.person = person;
public Vehicle()
public String getName()
return name;
public void setName(String name)
this.name = name;
public Vehicle(Integer vid, String name)
super();
this.vid = vid;
this.name = name;
@Override
public String toString()
return "Vehicle [vid=" + vid + ", name=" + name + "]";
【问题讨论】:
【参考方案1】:使用entityManager.createQuery("FROM Person p LEFT JOIN FETCH p.vehicleliste", Person.class).getResultList()
。这将为您提供所有人员实体及其车辆。
【讨论】:
以上是关于从 Hibernate 中的 JoinTable 中检索所有记录的主要内容,如果未能解决你的问题,请参考以下文章
New @JoinTable导致nativeQuery中的org.hibernate.exception.SQLGrammarException,我们没有头绪
Hibernate 在 JoinTable (List<>) 中声明复合主键
JPA 2.0 (Hibernate) 使用 @JoinTable 为 @OneToMany 生成不正确的连接表 PK
hibernate----1-N--jointable(人与地址)
码农小汪-Hibernate学习8-hibernate关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable