0

我是 Hibernate 的新手,我正在学习关系映射。我对双向 OneToMany 关系有疑问。我有两个类:人员和车辆。我使用@JoinTableAnnotation 创建了第三个 Table person_vehicle

问题:如何将 joinTable 中的所有数据放入 List。我想在表格视图中显示它们,但我的问题是 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 + "]";
    }
4

1 回答 1

0

使用entityManager.createQuery("FROM Person p LEFT JOIN FETCH p.vehicleliste", Person.class).getResultList(). 这将为您提供所有人员实体及其车辆。

于 2020-05-05T13:19:40.167 回答