我有2个班级:驾驶员和汽车。汽车表在单独的过程中更新。我需要的是在Driver中具有属性,该属性使我可以阅读完整的汽车说明,并仅写入指向现有Car的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);
}
}
汽车对象只是典型的JPA对象,没有向后引用驱动程序。
因此,我想通过以下方法实现的目标是:1)我可以使用详细的JSON View阅读完整的汽车描述2)或在简短的JsonView 3中仅阅读汽车的ID
3),最重要的是,在创建新驱动程序时,我只想传递汽车的JSON ID。这样,我在持久化期间不需要对汽车进行不必要的读取,而只需更新ID。
我收到以下错误消息:“对象引用了一个未保存的瞬态实例-在刷新之前保存该瞬态实例:com.Driver.car-> com.Car”
我不想在数据库中更新Car的实例,而只是从Driver引用它。知道如何实现我想要的吗?
谢谢。
更新:忘记提及在创建驱动程序期间我通过的Car的ID是DB中现有Car的有效ID。
该错误消息表示您的对象图中有一个瞬态实例,没有明确保留。简短回顾一下对象在JPA中可以具有的状态:
错误消息告诉您,正在使用的(托管/分离)驱动程序对象持有对Hibernate未知(瞬态)的Car对象的引用。为了使Hibernate了解从驱动程序引用的任何未保存的Car实例也应保存,您可以调用EntityManager的persist-
method。
另外,您可以在持久性上添加一个层叠(我想,只是从我的头顶上还没有测试过),它将在持久化驱动程序之前在Car上执行持久化。
@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.PERSIST)
@JoinColumn(name = "CAR_ID")
private Car car;
如果您使用entitymanager的合并方法来存储驱动程序,则应CascadeType.MERGE
改为添加,或两者都添加:
@ManyToOne(fetch=FetchType.LAZY, cascade={ CascadeType.PERSIST, CascadeType.MERGE })
@JoinColumn(name = "CAR_ID")
private Car car;
Car对象只是典型的JPA对象,没有对驱动程序的反向引用。 所以我试图通过这个来实现的是: 我可以使用详细的JSON视图阅读完整的汽车说明 或者我可以只读取汽车的Id,简写为jsonview 最重要的是,在创建新的驱动程序时,我只想传入汽车的JSON ID。这样,我就不需要在persist期间对Car进行不确定的读取,而只需要更新ID。 谢谢你。 更新:忘记了,我在创建驱动程序时通过的汽车的ID是
问题内容: 也许这是一个愚蠢的问题,但这困扰了我。 我有一个从员工到车辆的双向一对多关系。当我第一次将Employee保留在数据库中时(即它没有分配的ID),我也希望保留其关联的Vehicles。 目前,这对我来说很好,除了我保存的Vehicle实体没有自动映射关联的Employee,并且在数据库中Vehicle表中的employee_id外键列为空。 我的问题是,是否可以在雇员本身被保留的同时保
和 并将其存储在: 问题是:我真的需要手动保存每页吗?我是否可以只处理java集合,然后只保存主实体,如: 这个例子取自https://attacomsian.com/blog/spring-data-jpa-one-to-many-mapping 我想知道存储关系的正确和最好的方法,这就是为什么我在这里提问,而不仅仅是自己做实验,因为这篇文章似乎误导了很多人
母实体 子实体 代码持久化 请告诉我这些步骤是否正确。我有以下例外。并且无法理解为什么父id在子表中不可用 原因:org.hibernate.exception.ConstraintViolation异常:无法将值NULL插入到列PARAM_REF_ID,表PARAM中;列不允许空值。INSERT失败。
问题内容: 我已经建立了一个简单的多对多关系帐户:Hibernate角色,但是当我在添加角色后尝试在单元测试中保存帐户时,出现UnsupportedOperationException异常: 这是怎么了 我的实体设置有问题吗?或者这是hibernate或JPA限制,迫使我将m:m关系分解为3:n关系,也为m:n关系表建模(我想避免这种情况,因为它没有任何关系)附加信息)。我已经在原型中为其他1:n
我有一个实体: 要创建上述实体并将其保存到JPA存储库中,我将执行以下操作: 由于DB中的表存储了候选对象的FK,我认为设置一个id就足够了。但JPA希望我设置候选对象。这迫使我查询候选存储库。 是否需要从候选库中查询候选人以保存,或者如果我有可用的候选人id,我不能直接设置它?