2015-10-19 29 views
0

我正在與Hibernate一個小項目,我來,我無法找到一個解決一個問題:兒童不被存儲

我有一個表調用Solicitud(「父親」),這是由另一個表DetalleSolicitud(孩子)的幾個記錄組成的,你可以回想起以前的「模型」,比如賬單及其銷售細節。

那麼當我試圖拯救「父親」時,hibernate並沒有拯救它的兒子。

看到由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列不是一部分用於向DETALLESOLICITUD添加新記錄的sql語句是鏈接父親和兒子的列。我不知道爲什麼會這樣,因爲我認爲我的映射文件是錯誤的,但他們似乎是確定:

solicitud.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... 

detallesolicitud.hbm.xml

<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> 

所以,如果有人能幫助我,我真的很感激它

+0

嘗試刪除非空=從「真」 <列名稱=「IDSOLICITUD」not-null =「true」/> – StanislavL

回答

0

那麼,我終於找到了如何解決這個問題:看來我得到了一對多映射標籤的不良引用。

的問題是在該行

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

刪除其財產

table="DETALLESOLICITUD" 

,這足以解決這個問題

0

可能有兩種方式 -

一個從solicitud.hbm.xml

<set name="detallesSolicitud" cascade="save-update" table="DETALLESOLICITUD"> 
    <key> 
     <column name="IDSOLICITUD"/> 
    </key> 
    <one-to-many class="DetalleSolicitud" /> 
</set> 

等一個刪除不空,我相信

你應該保存的父親和沖洗會話,然後保存孩子一樣那麼就沒有具有「TOO」的空值。「DETALLESOLICITUD」。「IDSOLICITUD」來自父親。

還要確保序列「SOLICITUD_SEQ」已經存在於數據庫中。

希望這會有所幫助。謝謝