我有两个类: Driver和Car。汽车表在单独的进程中更新。我需要在Driver类中有一个属性,可以让我读取完整的汽车描述并只写入指向现有汽车的Id。以下是示例:
@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视图阅读完整的Car描述
- 或者我可以在短的JsonView中仅阅读Car的ID
- 最重要的是,在创建新的Driver时,我只想传递汽车的JSON ID。这样我就不需要在持久化期间进行不必要的Car读取,只需更新ID即可。
我得到以下错误:
object references an unsaved transient instance - save the transient instance before flushing : com.Driver.car -> com.Car
我不想在数据库中更新汽车实例,而只想从司机那里引用它。有什么办法可以实现我的愿望吗?
谢谢。
更新: 忘记提到我在创建司机时传递的汽车ID是数据库中现有汽车的有效ID。
fetch = FetchType.EAGER
不应该是LAZY
吗? - Niklas在刷新之前保存临时实例
。 - Charlo Poitras