1

自分のデザイン自体が間違っているのか、それとも何なのかはわかりません。しかし、どんな体でも私に解決策を与えることができます。オブジェクト、PlanningItemがあります。これから、PlanningItemの2つのプロパティを使用して、別のテーブルからレコードを取得する必要があります。そこで、ビューを作成し、そのビューをPlanningItemの1対多のリレーションレコードとして追加しました。計画アイテムを更新していたときにエラーが発生しました。これで、ビューを変更してサブ選択またはその他のものに変更する準備ができました。続行するためのアイデアを提案してください。

以下は私のコードです。

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;
4

2 に答える 2

1

関係パラメータinverse="true"の1対多側を設定してみてください。これにより、親を更新するときに関係(FK列)を更新しないようにhiberanteに指示します。

私は次を意味します:

<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>
于 2012-08-03T08:28:30.847 に答える
0

これは、一般的にHibernateを使用する方法ではありません。オブジェクトを問題のテーブルに直接関連付けます。次に、クエリを定義して、ビューに配置するフィルタリングなどでオブジェクトをフェッチできます。JPAオブジェクトを使用したクエリについては、 JPQLを読むことをお勧めします。

于 2012-08-03T08:29:20.603 に答える