从 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

Hibernate中的ManyToMany映射引用错误(由api生成的表名)表Spring Boot