当前位置: 首页 > 知识库问答 >
问题:

插入父项及其子项时是否可以Hibernate?插入子项时是否可以设置父项id,而不必在插入后进行更新?

裴兴学
2023-03-14

我有两个目标

public class Parent {
    int id;
    String name;
    int Set<Child> children;
}

public class Child {
    int id;
    String name;
    int parentId;
}

使用以下映射文件

<hibernate-mapping>
    <class name="Parent" table="parent">
        <id column="id" access="field">
            <generator class="identity"/>
        </id>    
        <property name="name" column="name" access="field" />    
        <set name="children" access="property" cascade="all" lazy="true"  >
            <key><column name="parent_id"/></key>
            <one-to-many class="com.hp.autonomy.corepolicy.common.dto.LexiconExpression"/>
        </set>
    </class>
    <class name="Child" table="child">
        <id column="id" access="field">
            <generator class="identity"/>
        </id>    
        <property name="name" column="name" access="field" />            
        <property name="parentId" column="parent_id" access="field" not-null="true" />
    </class>
</hibernate-mapping>

当我保存一个包含一个子项的父项时,生成的sql如下所示

Hibernate:插入到父(id,名称)值中(null,?)

Hibernate:插入子(id、父id、名称)值(null、、?)

Hibernate:更新子集父\u id=?其中id=?

似乎当hibernate插入孩子时,它会将parent_id设置为空,然后进行更新。这在我的数据库和Hibernate验证中引起了问题,因为模式说parent_id不能为空。

是否可以让第二条insert语句使用在插入父项时创建的父项id,而不是稍后出现并更新子项?

共有1个答案

左丘子平
2023-03-14

你需要改变

<property name="parentId" column="parent_id" access="field" not-null="true" />

通过

<many-to-one name="parent" class="change to the parent classname">
     <column name="parent_id" not-null="true" access="field"/>
</many-to-one>

您将需要更改孩子类,使其具有成员,而不是家长ID,并相应地更新上面的配置。

 类似资料:
  • 问题内容: 我的数据库包含三个表叫,和。链接表仅包含两列,即对象记录的标识和数据记录的标识。 我想从链接到一个给定对象标识的位置复制数据,并在不同的给定对象标识中插入相应的记录。 我 可以 通过选择一个表变量,并为每次迭代进行两次插入来循环执行此操作。 这是最好的方法吗? 编辑 :我想避免循环的原因有两个,第一个是我很懒,并且循环/临时表需要更多的代码,更多的代码意味着有更多的地方出错,第二个原因

  • 问题内容: 我在Android应用程序中将Dagger2用于DI。我发现我必须为使用@Inject字段的每个类编写注入方法。有没有一种方法可以只注入父类,而不必在每个子类上调用inject?以活动为例。我有一个“ 每个活动都从中延伸”的内容。有没有一种方法,我可以在BaseActivity的组件中创建一个注入方法,然后在BaseActivity的onCreate中调用inject,子活动中的@in

  • 问题内容: 只是想知道是否有可能以某种方式使CSS属性插入html代码而不是在上插入字符串或类似这样的元素: 这将非常方便…可以通过Javascript完成,但是使用CSS确实可以使生活更轻松:) 问题答案: 不幸的是,这是不可能的。根据规格: 生成的内容不会更改文档树。特别是,它不会反馈到文档语言处理器(例如,用于重新解析)。 换句话说,对于字符串值,这意味着始终按字面意义对待该值。无论使用哪种

  • 我已经创建了纸张和Mcq问题之间的映射如下。 } 当我更新纸质实体时,它会删除所有MCQ。 SQL输出:

  • 所以我有这段代码,但在我实际使用它之前,我无法知道函数需要多少参数 有没有可能修改这个函数,让它允许我插入我需要的参数?