У меня 2 класса: Водитель и Автомобиль. Таблица автомобилей обновляется в отдельном процессе. Что мне нужно, так это иметь свойство в Driver, которое позволяет мне читать полное описание автомобиля и записывать только идентификатор, указывающий на существующий автомобиль. Вот пример:
@Entity(name = "DRIVER")
public class Driver {
... ID and other properties for Driver goes here .....
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "CAR_ID")
private Car car;
@JsonView({Views.Full.class})
public Car getCar() {
return car;
}
@JsonView({Views.Short.class})
public long getCarId() {
return car.getId();
}
public void setCarId(long carId) {
this.car = new Car (carId);
}
}
Объект Car — это обычный объект JPA без обратной ссылки на Driver.
Итак, чего я пытался добиться этим:
- Я могу прочитать полное описание автомобиля, используя подробный JSON View
- или я могу прочитать только идентификатор автомобиля в Short JsonView
- и самое главное, при создании нового водителя я просто хочу передать JSON ID автомобиля. Таким образом, мне не нужно делать ненужные чтения для автомобиля во время сохранения, а просто обновлять идентификатор.
Я получаю следующую ошибку:
object references an unsaved transient instance - save the transient instance before flushing : com.Driver.car -> com.Car
Я не хочу обновлять экземпляр автомобиля в БД, а просто ссылаюсь на него из драйвера. Есть идеи, как добиться того, чего я хочу?
Спасибо.
ОБНОВЛЕНИЕ: забыл упомянуть, что идентификатор автомобиля, который я передаю во время создания драйвера, является действительным идентификатором существующего автомобиля в БД.