2012-08-03 63 views
0

我不知道我的設計本身是錯的還是什麼。但任何機構可以給我一個解決方案。 我有一個Object,PlanningItem。從這我需要通過使用PlanningItem的兩個屬性獲取記錄形成另一個表。所以我創建了視圖並在PlanningItem中將該視圖添加爲多個關係記錄。當我更新計劃項目時,我收到錯誤消息。 在此我準備將視圖改爲和再選擇或其他任何東西。請提出建議繼續。如何避免在更新hibernate中的父級時更新子對象?

以下是我的代碼。

ViewPlannigItem.hbm.xml

<class 
     name="com.cotyww.ipmasterdata.core.entity.master.ViewPlannigItem" 
     table="VW_PLANNING_ITEM" > 
     <id name="planningIrc" type="string" column="PLANNING_IRC"> 
      <generator class="assigned" /> 
     </id> 

     <property name="planningIRCDesc" column="PLANNING_ITEM_DESC" 
      type="string" /> 


     <property name="programId" column="PROGRAM_ID" type="string" /> 


     <property name="salesOrgId" column="SALES_ORG_ID" 
      type="integer" /> 

     <property name="salesBrandId" column="SALES_BRAND_PKEY" 
      type="integer" /> 

     <many-to-one name="salesBrand" update="false" insert="false" 
      class="com.cotyww.ipmasterdata.core.entity.master.SalesBrand" 
      column="SALES_BRAND_PKEY" /> 

     <many-to-one name="salesOrg" update="false" insert="false" 
      class="com.cotyww.ipmasterdata.core.entity.master.SalesOrg" 
      column="SALES_ORG_ID" /> 

    </class> 

PlanningItem.hbm.xml

<class 
     name="com.cotyww.ipmasterdata.core.entity.master.PlanningItem" 
     table="Planning_Item"> 
     <id name="planningIrc" type="string" column="PLANNING_IRC"> 
      <generator class="assigned" /> 
     </id> 

     <property name="programId" column="Program_Id" type="string" /> 

     <property name="planningitemDesc" column="Planning_Item_Desc" 
      type="string" /> 

     <many-to-one name="hierarchyCode" update="false" insert="false" 
      class="com.cotyww.ipmasterdata.core.entity.master.GmmBrand" 
      column="Gmm_Hierarchy_Code" /> 

     <property name="gmmhierarchyCode" column="Gmm_Hierarchy_Code" 
      type="string" /> 

     <many-to-one name="gmmcategoryCode" update="false" 
      insert="false" 
      class="com.cotyww.ipmasterdata.core.entity.master.GmmCategory" 
      column="Category_Code" /> 
     <property name="categoryCode" column="Category_Code" 
      type="string" /> 

     <set name="lstViewPlanningItem" cascade="none" > 
      <key column="PLANNING_IRC" /> 
      <one-to-many not-found="ignore" 
       class="com.cotyww.ipmasterdata.core.entity.master.ViewPlannigItem" /> 
      <filter name="planningsalesORg" 
       condition="SALES_ORG_ID = :salesOrgId" /> 
     </set> 

     <property name="modifiedBy" column="Audit_User" type="string" /> 
     <property name="modifiedDate" column="Audit_Date" type="date" /> 
     <property name="createdBy" column="Created_By" type="string" /> 
     <property name="createdDate" column="Created_Date" type="date" /> 

    </class> 
    <sql-query name="nextPlanningItemSequenceValueC1US"> 
     <![CDATA[ SELECT SQ_PLANNING_ITEM_PKEY_C1US.nextVal FROM dual ]]> 
    </sql-query> 

     <sql-query name="nextPlanningItemSequenceValueC1CA"> 
     <![CDATA[ SELECT SQ_PLANNING_ITEM_PKEY_C1CA.nextVal FROM dual ]]> 
    </sql-query> 

     <sql-query name="nextPlanningItemSequenceValueL1US"> 
     <![CDATA[ SELECT SQ_PLANNING_ITEM_PKEY_L1US.nextVal FROM dual ]]> 
    </sql-query> 

     <sql-query name="nextPlanningItemSequenceValueL1CA"> 
     <![CDATA[ SELECT SQ_PLANNING_ITEM_PKEY_L1CA.nextVal FROM dual ]]> 
    </sql-query> 

     <sql-query name="nextPlanningItemSequenceValueP1US"> 
     <![CDATA[ SELECT SQ_PLANNING_ITEM_PKEY_P1US.nextVal FROM dual ]]> 
    </sql-query> 

     <sql-query name="nextPlanningItemSequenceValueP1CA"> 
     <![CDATA[ SELECT SQ_PLANNING_ITEM_PKEY_P1CA.nextVal FROM dual ]]> 
    </sql-query> 
    <filter-def name="planningsalesORg"> 
     <filter-param name="salesOrgId" type="integer" /> 
    </filter-def> 

數據庫查看

CREATE OR REPLACE FORCE VIEW COREMASTER.VW_PLANNING_ITEM 
(PLANNING_IRC, PLANNING_ITEM_DESC, PROGRAM_ID, SALES_ORG_ID, SALES_BRAND_PKEY, 
GMM_HIERARCHY_CODE) 
AS 
SELECT P.PLANNING_IRC, 
      P.PLANNING_ITEM_DESC, 
      P.PROGRAM_ID, 
      nvl(MAP.SALES_ORG_ID,MAP1.SALES_ORG_ID) as sales_org, 
      nvl(MAP.SALES_BRAND_PKEY,MAP1.SALES_BRAND_PKEY) as sales_brand_pkey, 
      P.GMM_HIERARCHY_CODE 
    FROM PLANNING_ITEM P, 
      GMM_MAP MAP, 
      GMM_MAP MAP1  
    WHERE 
      P.GMM_HIERARCHY_CODE = MAP.GMM_HIERARCHY_CODE(+) 
      AND P.CATEGORY_CODE = Map.GMM_CATEGORY_CODE(+) 
      AND P.GMM_HIERARCHY_CODE = MAP1.GMM_HIERARCHY_CODE(+) 
      AND Map1.GMM_CATEGORY_CODE IS NULL; 

回答

1

嘗試在一個一對多的關係的一側設置參數inverse =「true」。這會告訴hiberante在更新父級時不更新關係(FK列)。

我的意思是未來:

<set name="lstViewPlanningItem" cascade="none" inverse="true"> 
     <key column="PLANNING_IRC" /> 
     <one-to-many not-found="ignore" 
       class="com.cotyww.ipmasterdata.core.entity.master.ViewPlannigItem" /> 
     <filter name="planningsalesORg" 
       condition="SALES_ORG_ID = :salesOrgId" /> 
</set> 
0

這不是你該怎麼一般使用Hibernate。將您的對象直接與相關表關聯,然後可以定義查詢以使用您放入視圖中的篩選等來獲取它們。我建議您閱讀JPQL查詢JPA對象。

+0

我明白,整個沒有遵循任何架構..我只是採取解決這個問題。即使表沒有任何foriegnkey引用..這些只是普通的數據。 – Jothi 2012-08-03 08:42:04

相關問題