hibernate + java.lang.StackOverflowError - PullRequest
       14

hibernate + java.lang.StackOverflowError

0 голосов
/ 05 марта 2012

Я получаю сообщение об ошибке:

java.lang.StackOverflowError 
        java.nio.Buffer.<init>(Buffer.java:176) 
        java.nio.ByteBuffer.<init>(ByteBuffer.java:259) 
        java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:52) 
        java.nio.ByteBuffer.wrap(ByteBuffer.java:350) 
        java.nio.ByteBuffer.wrap(ByteBuffer.java:373) 
        java.lang.StringCoding$StringEncoder.encode(StringCoding.java:237) 
        java.lang.StringCoding.encode(StringCoding.java:272) 
        java.lang.String.getBytes(String.java:946) 

Только после того, как я добавил отношение с productCategories в файл hbm продукта, эта ошибка начала возникать.Пожалуйста, совет

hbm файлы продукта и категории продукта:

<?xml version="1
<hibernate-mapping package="com.quinstreet.persistence.productCatalogue"
default-cascade="save-update">
<class
    name="com.quinstreet.persistence.productCatalogue.ProductCategoryDBVO"
    table="PRD_PRODUCT_CATEGORY" lazy="false">
            <cache usage="nonstrict-read-write" />
    <composite-id>
        <key-many-to-one name="product"
            class="com.quinstreet.persistence.product.ProductDBVO" column="PRODUCT_GUID" lazy="false"
            foreign-key="FK_PRD_PRODUCT_FK1" />
        <key-many-to-one name="category"
class="com.quinstreet.persistence.productCatalogue.CategoryMasterDBVO"
            column="CATEGORY_GUID" foreign-key="FK_PRD_CATEGORY_MASTER_FK1" />
    </composite-id>
    <property name="displaySequence" column="DISPLAY_SEQUENCE"
        type="java.lang.Integer" />
</class>
</hibernate-mapping>

Ниже приведен файл hbm продукта:

 <hibernate-mapping package="com.quinstreet.persistence.product" default-cascade="save-update">

 <!-- Abstract product definition -->
 <class name="com.quinstreet.persistence.product.ProductDBVO" table="PRD_PRODUCT"  lazy="false">

  <cache usage="nonstrict-read-write"/>

<!-- Unique identifier for the product -->
<id name="guid" type="java.lang.Long">
   <meta attribute="scope-set">protected</meta>
   <column name="guid"/>
   <generator class="com.quinstreet.persistence.GuidGenerator"/>
</id>

<!-- Version field -->
<!--<version name="version"/>-->

<!-- Discontinued flag -->
<property name="discontinued" type="boolean" not-null="true"/>

<!-- New product flag -->
<property name="newImport" type="boolean" not-null="true"/>

<!-- EIS identifier -->
<property name="eisIdentifier" type="string" unique="true" not-null="true" index="IDX_PRD_PRODUCT_EIS">
     <meta attribute="use-in-equals">true</meta>
</property>

  <!-- Update stock-count on allocation? -->
  <property name="stocked" type="boolean" not-null="true"/>

  <!-- Is this a prototype value? -->
  <property name="prototype" type="boolean" not-null="true"/>

  <property name="plcCode" type="string" not-null="false" column="plc_code"/>

<!-- References to legacy tables -->
<many-to-one name="availability" column="availabilityGuid" class="com.quinstreet.persistence.product.AvailabilityDBVO" foreign-key="FK_PRD_PRODUCT_AVAILABILITY" cascade="none"> 
    <meta attribute="property-type">com.quinstreet.domain.product.Availability</meta>
</many-to-one>
<many-to-one name="taxBand" column="taxBandGuid" class="com.quinstreet.persistence.tax.BandDBVO" foreign-key="FK_PRD_PRODUCT_TAX_BAND" cascade="none"> 
    <meta attribute="property-type">com.quinstreet.domain.tax.Band</meta>
</many-to-one>

<!-- Normalised Legacy Product Class -->
<many-to-one name="productClass" column="productClassGuid" class="com.quinstreet.persistence.product.ProductClassDBVO" foreign-key="FK_PRD_PRODUCT_CLASS" cascade="none">
    <meta attribute="property-type">com.quinstreet.domain.product.ProductClass</meta>
</many-to-one>

<!-- Normalised Legacy Product Type -->
<many-to-one name="productType" column="productTypeGuid" class="com.quinstreet.persistence.product.ProductTypeDBVO" foreign-key="FK_PRD_PRODUCT_TYPE" cascade="none">
    <meta attribute="property-type">com.quinstreet.domain.product.ProductType</meta>
</many-to-one>

<!-- Product-family this product belongs to -->
<many-to-one name="group" column="groupGuid" class="com.quinstreet.persistence.product.ProductGroupDBVO" foreign-key="FK_PRD_PRODUCT_GROUP" cascade="none" fetch="join">
    <meta attribute="property-type">com.quinstreet.domain.product.MasterProduct</meta>
</many-to-one>

  <many-to-one name="salesCategory1" column="sales_category_guid_1" class="com.quinstreet.persistence.product.SalesCategoryDBVO" foreign-key="fk_product_sc1" cascade="none"/>
  <many-to-one name="salesCategory2" column="sales_category_guid_2" class="com.quinstreet.persistence.product.SalesCategoryDBVO" foreign-key="fk_product_sc2" cascade="none"/>
  <many-to-one name="salesCategory3" column="sales_category_guid_3" class="com.quinstreet.persistence.product.SalesCategoryDBVO" foreign-key="fk_product_sc3" cascade="none"/>
  <many-to-one name="salesCategory4" column="sales_category_guid_4" class="com.quinstreet.persistence.product.SalesCategoryDBVO" foreign-key="fk_product_sc4" cascade="none"/>
  <many-to-one name="salesCategory5" column="sales_category_guid_5" class="com.quinstreet.persistence.product.SalesCategoryDBVO" foreign-key="fk_product_sc5" cascade="none"/>

<!-- Product pricing -->
<set name="prices" inverse="true" table="PRD_PRICE" lazy="true">
   <cache usage="nonstrict-read-write"/>

   <key column="productGuid" foreign-key="FK_PRD_PRICE_PRODUCT"/>

   <one-to-many class="com.quinstreet.persistence.product.PriceParametersDBVO"/>
</set>

<!-- Dimension-Values associated with this product -->
<set name="dimensionValues" table="PRD_PRODUCT_DIMENSION_VALUE" lazy="true" batch-size="25" cascade="none">
   <cache usage="nonstrict-read-write"/>

   <key column="productGuid" foreign-key="FK_PRD_PRODDIMVAL_PRODUCT"/>

    <many-to-many class="com.quinstreet.persistence.product.dimension.DimensionValueDBVO" column="dimensionValueGuid" foreign-key="FK_PRD_PRODDIMVAL_DIMVAL"/>
</set>

  <!-- Reference to default Sku's -->
  <set name="defaultSkus" table="PRD_SKU" inverse="true" lazy="true" where="defaultSku=1">
   <cache usage="nonstrict-read-write"/>

     <key column="productGuid" foreign-key="FK_PRD_SKU_PRODUCT"/>

     <one-to-many class="com.quinstreet.persistence.product.SkuDBVO"/>
  </set>

  <!-- Reference to all non-default Sku's -->
  <set name="nonDefaultSkus" table="PRD_SKU" inverse="true" lazy="true" where="defaultSku!=1">
   <cache usage="nonstrict-read-write"/>

     <key column="productGuid" foreign-key="FK_PRD_SKU_PRODUCT"/>

     <one-to-many class="com.quinstreet.persistence.product.SkuDBVO"/>
  </set>

  <!-- Reference to inventory entries -->
  <set name="inventories" table="PRD_INVENTORY" inverse="true" lazy="true">
     <cache usage="nonstrict-read-write"/>

     <key column="productGuid" foreign-key="FK_PRD_INVENTORY_PRODUCT"/>

     <one-to-many class="com.quinstreet.persistence.product.InventoryDBVO"/>
  </set>

  <!-- References to containing PackComponents -->
  <set name="containingPackComponents" table="PRD_PACK_COMPONENT" inverse="true" lazy="true" cascade="none">
     <cache usage="nonstrict-read-write"/>

     <key column="productGuid" foreign-key="FK_PRD_PACKCOMP_PRODUCT2"/>

     <one-to-many class="com.quinstreet.persistence.product.PackComponentDBVO"/>
  </set>


<set name="productCategories" table="PRD_PRODUCT_CATEGORY" lazy="true" batch-size="25" inverse="true"
    fetch="join">
    <cache usage="nonstrict-read-write"/>
    <key>
        <column name="PRODUCT_GUID" not-null="true" />
    </key>
    <one-to-many class="com.quinstreet.persistence.productCatalogue.ProductCategoryDBVO" />
</set>

<set name="recommendations" table="PRD_PRODUCT_RECOMMENDATION" inverse="true" lazy="true" batch-size="25" fetch="select">
 <cache usage="nonstrict-read-write"/>   
  <key column="productguid" not-null="true"/>
  <one-to-many class="com.quinstreet.persistence.productCatalogue.ProductRecommendationDBVO" />
</set>

<!-- L10n details -->
<idbag name="details" table="PRD_PRODUCT_L10N" lazy="true" batch-size="25">
   <cache usage="nonstrict-read-write"/>

   <collection-id type="long" column="guid">
        <meta attribute="scope-set">protected</meta>
        <!--<column name="guid"/>-->
        <generator class="com.quinstreet.persistence.GuidGenerator"/>
   </collection-id>

   <key column="productGuid" foreign-key="FK_PRD_PRODUCTL10N_PRODUCT"/>

   <composite-element class="com.quinstreet.persistence.product.ProductL10nDetailsDBVO">
        <meta attribute="implements">com.quinstreet.domain.product.ProductL10nDetails</meta>
        <meta attribute="extends">com.quinstreet.domain.l10n.AbstractL10nDetails</meta>
        <meta attribute="implement-equals" inherit="false">true</meta>

    <many-to-one name="localeDbvo" class="com.quinstreet.persistence.l10n.LocaleDBVO" column="localeGuid" not-null="true" foreign-key="FK_PRD_PRODUCTL10N_LOCALE" cascade="none">
           <meta attribute="property-type">com.quinstreet.persistence.l10n.LocaleDBVO</meta>
           <meta attribute="use-in-equals">true</meta>
    </many-to-one>
    <many-to-one name="realmDbvo" class="com.quinstreet.persistence.context.RealmDBVO" column="realmGuid" not-null="true" foreign-key="FK_PRD_PRODUCTL10N_REALM" cascade="none">
           <meta attribute="property-type">com.quinstreet.persistence.context.RealmDBVO</meta>
           <meta attribute="use-in-equals">true</meta>
    </many-to-one>

    <property name="description" type="string"/>
    <property name="longDescription" type="string"/>
    <property name="eisDescription" type="string"/>

    <property name="noStockMessage" type="string"/>

        <!-- Generic product attribute holders -->
        <property name="genericAttribute1" type="string"/>
        <property name="genericAttribute2" type="string"/>
        <property name="genericAttribute3" type="string"/>
        <property name="genericAttribute4" type="string"/>
        <property name="genericAttribute5" type="string"/>
        <property name="genericAttribute6" type="string"/>

        <property name="genericName" type="string" column="GENERIC_NAME"/>
        <property name="ingredients" type="string"/>
        <property name="quantity" type="string"/>
        <property name="nutritionFacts" type="string" column="NUTRITION_FACTS"/>
        <property name="dose" type="string"/>
        <property name="catchingPhrase" type="string" column="CATCHING_PHRASE"/>
        <!-- property name="recommendedFor" type="string" column="RECOMMENDED_FOR"/-->
        <property name="promotionMsg" type="string" column="PROMOTION_MESSAGE"/>
        <property name="message" type="string"/>
        <property name="productDescription" type="string" column="PRODUCT_DESCRIPTION"/>
        <property name="notViewable" type="yes_no"  column="SUPPRESS_WEB_VIEWABLE"/>
        <!-- property name="displaySequence" type="integer" column="DISPLAY_SEQUENCE"/-->

   </composite-element>
</idbag>


  <!-- Pack definition -->
  <joined-subclass name="com.quinstreet.persistence.product.PackDBVO" table="PRD_PACK" lazy="false">
     <key column="productGuid" foreign-key="FK_PRD_PACK_PRODUCT"/>

     <!-- Should lines be displayed? -->
     <property name="itemsVisible" type="boolean" not-null="true"/>

     <!-- Pack type -->
     <many-to-one name="packType" class="com.quinstreet.persistence.product.PackTypeDBVO" column="packTypeGuid" not-null="true"  foreign-key="FK_PRD_PACK_PACKTYPE" cascade="none">
        <meta attribute="property-type">com.quinstreet.domain.product.PackType</meta>
     </many-to-one>

     <!-- Status flags -->
     <property name="componentsValid" type="boolean" not-null="true"/>
     <property name="pricesValid" type="boolean" not-null="true"/>

     <!-- Pack components -->
     <set name="packComponents" table="PRD_PACK_COMPONENT" lazy="true" inverse="true">
       <cache usage="nonstrict-read-write"/>

        <key column="packProductGuid" foreign-key="FK_PRD_PACKCOMPONENT_PACK"/>

        <one-to-many class="com.quinstreet.persistence.product.PackComponentDBVO"/>
     </set>

  </joined-subclass>

Работает хорошопосле того, как я прокомментирую следующее в продукте hbm

   <set name="recommendations" table="PRD_PRODUCT_RECOMMENDATION" inverse="true" lazy="true" batch-size="25" fetch="select"> 
 <cache usage="nonstrict-read-write"/>   
  <key column="productguid" not-null="true"/> 
  <one-to-many class="com.quinstreet.persistence.productCatalogue.ProductRecommendationDBVO" /> 
</set> 

1 Ответ

0 голосов
/ 05 марта 2012

Убедитесь, что вы не вызываете один и тот же метод при переопределении его в каком-либо классе, а не вызываете супер версию:

public void setWhatever(Whatever whatever) {
   super.setWhatever(whatever);
   this.whateverSet = true;
}

not:

public void setWhatever(Whatever whatever) {
   setWhatever(whatever);
   this.whateverSet = true;
}
...