【问题标题】:org.hibernate.PropertyValueException: not-null property references a null or transient value:org.hibernate.PropertyValueException:非空属性引用空值或瞬态值:
【发布时间】:2013-12-26 21:46:55
【问题描述】:

我想将一个对象保存到我的子类 ArticleZoning 中,其超类 Zoning 包含一个类 zoneData 列表,其中还包含一个类 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
}

【问题讨论】:

  • 在您的 Zonning 构造函数中添加一个关于属性 zoneDatas 的新列表
  • 您尝试持久化数据的代码在哪里?
  • 所有数据都来自不为空的视图(打印在控制台上),然后我保存遇到问题的文章分区对象

标签: java hibernate


【解决方案1】:

首先,ArticleZoning POJO 的 articleOrder 为 String 类型。你的 Zonning.hbmarticleOrder 是 int 类型。 其次,由于分区表无法保存,因此其外键为空。

【讨论】:

    猜你喜欢
    • 2022-11-25
    • 2017-04-25
    • 1970-01-01
    • 2011-12-23
    • 2010-10-08
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多