0

データベース内の次の 2 つのテーブルを検討してください。

FUNCTION_TABLE

FUNC_CD     |   INPUT_ATTR_ID   |   OUTPUT_ATTR_ID
multiply    |   1               |   3
multiply    |   2               |   3
multiply    |   4               |   6 
multiply    |   5               |   6

ATTRIBUTE_TABLE

ATTR_ID     |   ATTR_NAME
1           |   AttributeOne
2           |   AttributeTwo
etc

私の Function クラスには以下が含まれている必要があります。

public class Function {
    private String functionCode;
    private Set<Attribute> inputAttributes;
    private Attribute outputAttribute;
}

My Function DAO には、指定された outputAttribute の Function オブジェクトを返すメソッドが含まれます

これをどのようにマッピングしますか?私が見た例では、コレクションの結合テーブルが必要です。

私のマッピングには、これまでのところ次のものが含まれています。

<class name="my.Function" table="FUNCTION_TABLE">
    <id name="functionCode" column="FUNC_CD" type="java.lang.String" />
    <many-to-one name="outputAttribute" class="my.Attribute" column="OUTPUT_ATTR_ID"/>
</class>

ただし、別のテーブルが必要なため、入力属性をマップする方法に途方に暮れています

4

1 に答える 1

0

これはデータベースでこれを表す非標準的な方法であるため、hibernate はこの ootb をサポートしていません。

オプション1:

// Function as wrapper around parts

Function getFunction(String code, Attribute outattr)
{
    List<FunctionPart> parts = session.createCriteria(FunctionPart.class)
        .add(Expression.eq("functionCode", code))
        .add(Expression.eq("outputAttribute", outattr))
        .list()

    return new Function(code, outattr, parts);
}

長所: 単純な短所: クエリごとの関数、追加のクラス、inattributes に対するクエリなし

オプション 2:

関数を偽のエンティティにし、属性に依存する

<class name="my.Function" table="FUNCTION_TABLE" schemaction="none" where="todo INPUT_ATTR_ID = (min INPUT_ATTR_ID of same id)">
    <id name="functionCode" column="FUNC_CD" type="java.lang.String" />
    <many-to-one name="outputAttribute" class="my.Attribute" column="OUTPUT_ATTR_ID"/>

    <sqlinsert>INSERT into TEMPTABLE</sqlinsert>
    <sqlupdate>INSERT into TEMPTABLE</sqlupdate>

    <set name="inputAttributes" class="my.Attribute" table="FUNCTION_TABLE" cascade="all">
      <key>
        <column name="FUNC_CD" />
        <column name="OUTPUT_ATTR_ID" />
      </key>
      <many-to-many class="Attribute" column="INPUT_ATTR_ID">
    </set>
</class>

長所:あなたが要求したように短所:ハック、不要な結合、存在しない場合は一時テーブルを作成する必要があります

于 2012-05-18T12:17:38.863 に答える