org.hibernate.PropertyValueException:not-null属性引用null或transient值:

时间:2013-12-13 11:27:24

标签: java hibernate

我想将一个对象保存到我的子类ArticleZoning,其超类Zoning包含一个Class类的List,它还包含一个ZoneCoordinate类。当我保存子类ArticleZoning的对象时,它会给出一个例外。

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>

这是 Zoning 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
}

1 个答案:

答案 0 :(得分:2)

首先,ArticleZoning POJO将articleOrder作为String类型。您的Zonning.hbm表示articleOrder属于int类型。 其次,由于分区表无法保存,因此其外键为空。