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