2

現在、いくつかのレガシー コードに取り組んでいるため、データベース スキーマまたはドメイン モデルを変更できません。

Java オブジェクトは次のようになります。

class Person {
  private int prsnId; //get, set
  private int custId; //get, set
  private String name; //get, set
  private String mail; //get, set
  private String status; //get, set
  private String logon; //get, set
  private Contact[] contact; //get, set, add
}

class Contact {
  private int cntcId; //get, set
  private int prorId; //get, set
  private String contactType; //get, set
  private String contactLanguage; //get, set
  private String contactUser; //get, set
}

次のクエリを実行できるようにするマッピングを作成しようとしているので、連絡先配列に連絡先がある人のリストが返されます。

List<Person> personList = new ArrayList<Person>();
int customerId = /*something*/;
DetachedCriteria subQuery = DetachedCriteria.forClass(PersonOrg.class, "persorg")
.setProjection(Projections.projectionList().add(Projections.property("persorg.prsnId")))
.add(Restrictions.eq("custId", customerId));
Criteria criteria = session.createCriteria(Person.class);
criteria.setFetchMode("Person", FetchMode.JOIN)
    .setFirstResult(0)
    .setMaxResults(20)
    .add(Property.forName("prsnId").in(subQuery));          
personList = criteria.list();

私が今持っているマッピングでは、Persons のリストを取得しますが、それらの contact-array は null 値で満たされています。そして、それは私の理由には明らかではありません。これまでの私のマッピングは次のとおりです。

<hibernate-mapping>
    <class name="be.bene.cris2.protocol.Person" table="BENE_CUST_PERSON" dynamic-update="true" dynamic-insert="true">
        <id name="prsnId" type="int">
            <column name="PRSN_ID" precision="10" scale="0" />
             <generator class="sequence">
                   <param name="sequence">CUST_PROR_SEQ</param>
            </generator>
        </id>

        <property name="name" type="string">
            <column name="NAME" length="20" />
        </property> 

        ...

        <array name="contact" table="BENE_CUST_PERSORG" inverse="true" fetch="join">
            <key column="PRSN_ID" not-null="false"/>
            <index column="CUST_ID"/>
            <many-to-many entity-name="be.bene.cris2.protocol.Contact" column="PROR_ID" not-found="ignore"/>
        </array>

        <join table="BENE_CUST_PERSORG">
            <key column="PRSN_ID"/>
            <property name="custId" column="CUST_ID"/>
            <property name="prorId" column="PROR_ID"/>
            <property name="persorgType" type="be.bene.cris2.usertypes.CustomMasterSecundaryTertiaryIndicatorType" column="PERSORG_TYPE"/>
        </join>

    </class>
</hibernate-mapping>

不足している情報がありましたら、お尋ねください。

  • 休止状態 3.6.1 を使用します

前もって感謝します

4

1 に答える 1

0
<join table="BENE_CUST_PERSORG">
  <key column="PRSN_ID"/>
  <property name="custId" column="CUST_ID"/>
  <property name="prorId" column="PROR_ID"/>
  <property name="persorgType" type="be.bene.cris2.usertypes.CustomMasterSecundaryTertiaryIndicatorType" column="PERSORG_TYPE"/>
  <array name="contact" inverse="true">
    <key column="PROR_ID" not-null="false"/>
    <index column="<columninContactTablecontainingArrayIndex>"/> or <index formula="(SELECT ROW_NUMBER() FROM Contacts c WHERE <FK matches> )"/>
    <one-to-many entity-name="be.bene.cris2.protocol.Contact" not-found="ignore"/>
  </array>
</join>
于 2012-10-26T09:24:42.073 に答える