Получить все записи из JoinTable в Hibernate - PullRequest
0 голосов
/ 04 мая 2020

я новичок ie в Hibernate, и я изучаю реляционное картирование. У меня проблема с двунаправленными отношениями OneToMany. У меня есть два класса: человек и автомобиль. Я использовал аннотацию @JoinTable для создания третьей таблицы person_vehicle.

Проблема: Как получить все данные из таблицы соединений в Список. Я хочу показать их в виде таблицы, но мой вопрос в том, какой тип данных у таблицы 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 Ответ

0 голосов
/ 05 мая 2020

Используйте entityManager.createQuery("FROM Person p LEFT JOIN FETCH p.vehicleliste", Person.class).getResultList(). Это даст вам все физические лица вместе с их транспортными средствами.

...