当前位置: 首页 > 面试题库 >

Hibernate-如何与orphan一起保存Parent

糜博远
2023-03-14
问题内容

我正在从UI发送对象。将使用对现有子项的引用来创建该对象

这是这种关系的简单说明。

class ParentEntity {
    @Id
    Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    private ChildEntity child;
}

class ChildEntity {
    @Id
    Long id;
}



ChildEntity child = new ChildEntity();
child.setId(1);
//parentEntity is created based on data sent from UI
parentEntity.setChild(child);

保存该对象时,Hibernate给我“
org.hibernate.TransientPropertyValueException:对象引用了一个未保存的瞬态实例”。

我根本不需要改变孩子,所以不必拯救孩子。只需要将孩子的ID保存在父母的表中。

我尝试使用一些CascadeType,但没有一个起作用。


问题答案:

只需为孩子使用代理:

parentEntity.setChild(entityManager.getReference(ChildEntity.class, childId));

这里的重点是使用EntityManager.getReference:

获取一个实例,其状态可能会延迟获取。

Hibernate将创建仅包含ID的代理,而无需访问数据库。



 类似资料:
  • 想要保存一个一对一的主值,如下所示。有一个address类,它包含一个city类一对一。但是city是我的主值,当我保存地址时我不想更新它。只需要从UI的下拉菜单中选择city并将对象设置为原来的地址并保存地址。但是当保存时getting below错误。 org.hibernate.transientPropertyValueException:对象引用了一个未保存的瞬态实例-在刷新之前保存瞬态

  • 作为对我发布的一个问题的继续,我试图在我的代码库中使用ThreadPoolExecutor。即使在反复尝试从Java API文档中理解之后,我也未能清楚地理解要在构造函数中传递的参数背后的功能/目的。希望有人能给我举个好例子。 Java文档节选: 当线程数大于核心时,这是多余的空闲线程在终止前等待新任务的最长时间。

  • 我正在做一个jsf项目(2.2版)。我在javascript中有一个GeoJson对象。另一边我有一个列与类型的测地(MultiPolygon,4326)在PostGIS.我使用的是Hibernate 4.3.8和Postgreql 9.3。 模型类中的几何图形列定义 我还将Hibernate Sspace al 4. x包含到我的项目中,我可以在托管bean中访问Geojson字符串。但是我不知

  • 我只想简单问一下,当Spring Boot Web应用程序的JPA在数据库中保存数据或BLOB(使用@LOB)或字节数组数据时,在数据库中保存图像的真正形式是什么?它是将整个字节数据保存在数据库中,还是只保存字节数组对象的引用或地址,实际上是将其保存到系统的文件空间中。 我想专门询问Spring启动JPA存储库。请解释一下。如果有任何演示示例进行测试,请提供

  • 我有以下的类描述片段: 此代码在HiberNate 4上不起作用,因为不支持 我从Joda Time看到了关于如何使用LocalDateTime的建议,但我使用的是Java 8。

  • 我在使用hibernate和Oracle db执行限制条件时遇到问题。 简化的标准是: 这给了我NullPointerExceltion。我明白,我需要把setEscape处理(假)为了忽略括号{}在{宠物},但我不知道如何做到这一点,因为我正在使用标准。 如果有人能帮助我,我会很高兴的。 这是生成的异常: java.lang.oracle.jdbc.driver.T4C8Oall.getNumR