2013-12-13 78 views
2

我想將對象保存到我的子類ArticleZoning,其超級分區包含類ZoneData的列表,其中也包含類ZoneCoordinate。當我保存我的子類ArticleZoning的對象時,它會給出例外。org.hibernate.PropertyValueException:not-null屬性引用空值或瞬態值:

org.hibernate.PropertyValueException: not-null property references a null or transient value: com.qait.cdl.eon.commons.domain.ZoneData._com.qait.cdl.eon.commons.domain.Zonning.zoneDatasBackref 
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:101) 
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:313) 
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204) 
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130) 
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)..... 

這裏是* Zonning HBM *映射文件: -

<class name="Zonning" table="zoning"> 
<id name="id" column="id" type="long"> 
     <generator class="native" /> 
    </id> 

<list name="zoneDatas" lazy="false" cascade="all-delete-orphan" > 
     <key column="zoning_id" not-null="true"/> 
     <list-index column="idx" base="1" /> 
     <one-to-many class="com.qait.cdl.eon.commons.domain.ZoneData" /> 
</list> 

<many-to-one class="com.qait.cdl.eon.commons.domain.MagazineIssue" unique="true" column="issue_id" name="issue"/> 

<property name="pageNumber" column="article_on_pageNumber" type="string" not-null="true" /> 


    <joined-subclass name="ArticleZoning" extends="Zonning" table="article_zoning"> 

     <key column="article_id"/> 
     <property name="articleTitle" column="article_title" type="string" not-null="true" /> 
     <property name="articleOrder" column="article_order" type="int" not-null="true" /> 
     <property name="articleFileId" column="article_file_id" type="string" not-null="true" /> 


     <property name="articleType" column="article_type"> 
      <type name="org.hibernate.type.EnumType"> 
       <param name="type">12</param> 
       <param name="enumClass">com.qait.cdl.eon.common.constants.ArticleType</param> 
      </type> 
     </property> 

     <property name="articleSubTitle" column="article_sub_title" type="string" not-null="true" /> 
     <property name="articleGenre" column="article_genre"> 
      <type name="org.hibernate.type.EnumType"> 
       <param name="type">12</param> 
       <param name="enumClass">com.qait.cdl.eon.common.constants.Genre</param> 
      </type> 
     </property> 

    </joined-subclass> 

    <joined-subclass name="AdvertisementZoning" extends="Zonning" table="advertisement_zoning"> 

     <key column="advertisement_id" /> 
     <property name="adVendor" column="ad_vendor" type="string" not-null="true" /> 
     <property name="vendorUrl" column="vendor_url" type="string" not-null="true" /> 
     <property name="adProduct" column="ad_product" type="string" not-null="true" /> 
     <list name="adKeywords" table="ad_keywords" lazy="false" cascade="all"> 
      <key column="ad_keywords_id" /> 
      <list-index base="0" column="idx"/> 
      <element column="keywords" type="string" /> 
     </list> 
    </joined-subclass> 

</class> 

這裏是ZoneData HBM

<id name="id" column="id" type="long"> 
     <generator class="native" /> 
    </id> 
    <property name = "zoneOrder" column = "zone_order" type = "int" not-null="true"/> 
    <property name = "zoneFileId" column = "zone_file_id" type = "string" not-null="true"/> 
    <property name = "zoneShape" column = "zone_shape" type = "string" not-null="true" access="field"></property> 

    <many-to-one name="coordinates" column="coordinates_id" lazy="false" class="com.qait.cdl.eon.commons.domain.ZoneCoordinates" 
    unique="true" not-null="true" cascade="all-delete-orphan"/> 

</class> 

這裏是ZoneCoordinate HBM

<class name="ZoneCoordinates" table="zone_coordinates"> 

     <id name="id" column="id" type="long"> 
      <generator class="native" /> 
     </id> 
     <property name = "leftTopX"  column = "left_top_x"  type = "float" not-null="true" /> 
     <property name = "leftTopY"  column = "left_top_y"  type = "float" not-null="true" /> 
     <property name = "rightBottomX" column = "right_bottom_x" type = "float" not-null="true" /> 
     <property name = "rightBottomY" column = "right_bottom_y" type = "float" not-null="true" /> 
    </class> 

這裏是分區POJO

class Zoning{ 
    private List<ZoneData> zoneDatas =new ArrayList<>(); 
    private MagazineIssue issue; 
    private String pageNumber; 
    //getter and setter 
    } 

這裏是ZoneData POJO

class ZoneData{ 
    private int zoneOrder; 
    private String zoneFileId ; 
    private ZoneCoordinates coordinates; 
    private final String zoneShape = "RECT"; 
    //getter and setter 
} 

在這裏被ArticleZoning POJO

class ArticleZoning extends Zoning{ 
private String articleTitle; 
private String articleOrder; 
private ArticleType articleType; 
private String articleFileId; 
private String articleSubTitle; 
private Genre articleGenre; 
//getter and setter 
} 

這裏是ZoneCoordinate POJO

class ZoneCoordinate{ 

    private float leftTopX; 
    private float leftTopY; 
    private float rightBottomX; 
    private float rightBottomY; 
    //getter and setter 
} 
+0

在您的Zonning構造函數中添加一個關於屬性zoneDatas的新列表 –

+0

您的代碼試圖持久化數據的位置在哪裏? – jpkrohling

+0

所有的數據來自視圖,它不是null(在控制檯上打印)之後,我保存了我遇到問題時的文章分區對象 – rahul

回答

2

首先,ArticleZoning POJO具有articleOrder爲字符串類型。您的Zonning.hbm表示articleOrder是int類型。 其次,由於分區表無法保存,因此其外鍵爲空。

+0

是的,我已經完成了這項工作。 – rahul

相關問題