JPA: получить несколько столбцов из таблицы, связанных с текущим значением. - PullRequest
0 голосов
/ 29 мая 2018

Я новичок в JPA и мне нужен совет.У меня есть две таблицы, Car и Driver, связанные как ManyTyOne.И я получу автомобиль с информацией о нескольких водителях.Теперь я могу получить из Driver только driver_id, он выглядит так, но нужно также получить имя и фамилию водителя.

Класс Car:

@Entity
public class Car {

@JsonIgnoreProperties({"telephone", "mail",})
@ManyToOne
@JoinColumn(name = "driver_id"),
private Driver driver;
...
}

@Entity
class Driver: 

@JsonIgnoreProperties({"telephone", "mail",})
public class Driver {

private Long id;
private String firstName;
private String lastName;
private String telephone;
private String mail;
...
}

Таблица car SQL:

CREATE TABLE `car` (
`id` decimal(20) unsigned NOT NULL AUTO_INCREMENT,
`driver_id` bigint(20) DEFAULT NULL,
 PRIMARY KEY (`id`),
 FOREIGN KEY (driver_id) REFERENCES driver(id),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Сначала я думаю, что можно также получить имя и фамилию драйвера следующим образом:

@JoinColumns({@JoinColumn(name = "driver_id"),
        @JoinColumn(name = "first_name"),
        @JoinColumn(name = "last_name")})

Но в документации сказано, что @JoinColums подходит только для составного fk.Пожалуйста, дайте мне подсказку, как я могу сделать то, что нужно.

1 Ответ

0 голосов
/ 30 мая 2018

Предполагая, что ваш класс Driver является сущностью (вы не добавили аннотацию @Entity в приведенном выше коде.)

В вашем текущем сопоставлении говорится, что каждый водитель может водить несколько автомобилей.Так как множество к одному существует только на стороне Car, нет способа перейти от Driver к Car.Чтобы сделать это, вам нужно иметь @OneToMany отображение, идущее от Driver до Car.(Кроме того, разве это не должно быть сопоставление «многие ко многим»: каждый водитель может управлять несколькими автомобилями, и у каждого автомобиля может быть несколько водителей?)

В любом случае, учитывая сопоставление, как указано выше, вы должны иметь возможностьчтобы получить доступ к driver.firstName и driver.lastName.В чем ошибка, когда вы пытаетесь это сделать?

...