Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 未存储儿童_Hibernate_Spring Mvc - Fatal编程技术网

Hibernate 未存储儿童

Hibernate 未存储儿童,hibernate,spring-mvc,Hibernate,Spring Mvc,我正在用Hibernate做一个小项目,我遇到了一个我找不到解决方案的问题: 我有一个table call claircud(“父亲”),它由另一个table detalleclaircud(孩子们)的几个记录组成,你可以回忆起以前的“模型”,比如账单和它的销售细节 当我试图拯救“父亲”时,冬眠并没有拯救它的儿子 看到hibernate生成的sql语句,我注意到没有存储将子项与之链接的列: Hibernate: insert into SOLICITUD (ESTADO, TIPOSOLICIT

我正在用Hibernate做一个小项目,我遇到了一个我找不到解决方案的问题:

我有一个table call claircud(“父亲”),它由另一个table detalleclaircud(孩子们)的几个记录组成,你可以回忆起以前的“模型”,比如账单和它的销售细节

当我试图拯救“父亲”时,冬眠并没有拯救它的儿子

看到hibernate生成的sql语句,我注意到没有存储将子项与之链接的列:

Hibernate: insert into SOLICITUD (ESTADO, TIPOSOLICITUD, IDUSUARIO,  IDSOLICITUD) values (?, ?, ?, ?)
Hibernate: insert into DETALLESOLICITUD (IDLAB, IDDIA, IDBLOQUE, IDDETALLE) values (?, ?, ?, ?)
WARN : org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1400, SQLState: 23000
ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ORA-01400: cannot insert NULL into ("TOO"."DETALLESOLICITUD"."IDSOLICITUD")
如您所见,IDSOLICITUD列不是sql语句的一部分,用于向DetalLearchud添加新记录,而这是链接父子的列。我不知道为什么会发生这种情况,因为我认为我的映射文件是错误的,但它们似乎没有问题:

requestud.hbm.xml

<class name="Solicitud" table="SOLICITUD">
    <id name="id" column="IDSOLICITUD">
        <generator class="sequence">
            <param name="sequence">SOLICITUD_SEQ</param>
        </generator>
    </id>
    <property name="estado" column="ESTADO"/>
    <property name="tipo" column="TIPOSOLICITUD"/>
    <many-to-one name="usuario_solicitante" class="Usuario">
        <column name="IDUSUARIO" not-null="true"></column>
    </many-to-one>
    <set name="detallesSolicitud" cascade="save-update" table="DETALLESOLICITUD">
        <key>
            <column name="IDSOLICITUD" not-null="true"/>
        </key>
        <one-to-many class="DetalleSolicitud" />
    </set>
... Lots of other attributes...
<class name="DetalleSolicitud" table="DETALLESOLICITUD">
    <id name="id" column="IDDETALLE">
        <generator class="sequence">
            <param name="sequence">DETALLESOLICITUD_SEQ</param>
        </generator>
    </id>
... Lots of other attributes ...
        </class>
 <set name="detallesSolicitud" cascade="save-update" table="DETALLESOLICITUD">
    <key>
        <column name="IDSOLICITUD"/>
    </key>
    <one-to-many class="DetalleSolicitud" />
</set>

征求意见
... 许多其他属性。。。
detallearcud.hbm.xml

<class name="Solicitud" table="SOLICITUD">
    <id name="id" column="IDSOLICITUD">
        <generator class="sequence">
            <param name="sequence">SOLICITUD_SEQ</param>
        </generator>
    </id>
    <property name="estado" column="ESTADO"/>
    <property name="tipo" column="TIPOSOLICITUD"/>
    <many-to-one name="usuario_solicitante" class="Usuario">
        <column name="IDUSUARIO" not-null="true"></column>
    </many-to-one>
    <set name="detallesSolicitud" cascade="save-update" table="DETALLESOLICITUD">
        <key>
            <column name="IDSOLICITUD" not-null="true"/>
        </key>
        <one-to-many class="DetalleSolicitud" />
    </set>
... Lots of other attributes...
<class name="DetalleSolicitud" table="DETALLESOLICITUD">
    <id name="id" column="IDDETALLE">
        <generator class="sequence">
            <param name="sequence">DETALLESOLICITUD_SEQ</param>
        </generator>
    </id>
... Lots of other attributes ...
        </class>
 <set name="detallesSolicitud" cascade="save-update" table="DETALLESOLICITUD">
    <key>
        <column name="IDSOLICITUD"/>
    </key>
    <one-to-many class="DetalleSolicitud" />
</set>

详情如下
... 许多其他属性。。。

所以,如果有人能帮我,我会非常感激的

有两种方法-

从requictud.hbm.xml中删除NOTNULL的一个

<class name="Solicitud" table="SOLICITUD">
    <id name="id" column="IDSOLICITUD">
        <generator class="sequence">
            <param name="sequence">SOLICITUD_SEQ</param>
        </generator>
    </id>
    <property name="estado" column="ESTADO"/>
    <property name="tipo" column="TIPOSOLICITUD"/>
    <many-to-one name="usuario_solicitante" class="Usuario">
        <column name="IDUSUARIO" not-null="true"></column>
    </many-to-one>
    <set name="detallesSolicitud" cascade="save-update" table="DETALLESOLICITUD">
        <key>
            <column name="IDSOLICITUD" not-null="true"/>
        </key>
        <one-to-many class="DetalleSolicitud" />
    </set>
... Lots of other attributes...
<class name="DetalleSolicitud" table="DETALLESOLICITUD">
    <id name="id" column="IDDETALLE">
        <generator class="sequence">
            <param name="sequence">DETALLESOLICITUD_SEQ</param>
        </generator>
    </id>
... Lots of other attributes ...
        </class>
 <set name="detallesSolicitud" cascade="save-update" table="DETALLESOLICITUD">
    <key>
        <column name="IDSOLICITUD"/>
    </key>
    <one-to-many class="DetalleSolicitud" />
</set>

还有一个我相信

您应该保存父进程并刷新会话,然后保存子进程,因为这样子进程就不会有父进程中的空值“TOO”。“detallearchud”。“IDSOLICITUD”

还要确保序列“requestud_SEQ”已经存在于数据库中


希望这有帮助。谢谢

我终于找到了解决问题的方法:似乎我得到了一对多映射标记的错误引用

问题在于财产

table="DETALLESOLICITUD"
排队

<set name="detallesSolicitud" cascade="save-update" table="DETALLESOLICITUD">

删除它,就足以解决问题

尝试从