0

かなりばかげた質問があります。

子リレーションから単一の列のみをプルバックする直接リレーションを持つことは可能ですか...例...

@Table(name="AUTH")
public class Magazine {

    @Column(length=9)
    @Id private String isbn;
    @Id private String title;

    @OneToOne
    @JoinColumn(name="COVER_ID" referencedColumnName="ID")
    private string coverArticle; //<--- I want this to just have the Article Name... How can this be done

    ...
}

上記のoneTooneアノテーションを参照してください。記事名の文字列だけを含めるようにしたい...

@Table(name="ART")
public class Article {

    @Id private long id;

    @Id private String ArticleName;
}

別のテーブルから要素のコレクションを取得するElementCollectionを作成できることは知っていますが、どのようにして単一の値をその要素に戻すのですか?

4

1 に答える 1

0

これはおそらく期待したほど単純ではありませんが、エンティティに FetchGroup を定義することでこれを行うことができます。上記の例では、次のように変更できます。

@FetchGroups({
    @FetchGroup(name="coverArticleNameOnly", attributes={
        @FetchAttribute(name="isbn"),
        @FetchAttribute(name="title"),
        @FetchAttribute(name="coverArticle"),
        ...
    })
})
@Table(name="AUTH")
public class Magazine {

    @Column(length=9)
    @Id private String isbn;
    @Id private String title;

    @OneToOne
    @JoinColumn(name="COVER_ID" referencedColumnName="ID")
    private string coverArticle;

    ...
}

@FetchGroups({
    @FetchGroup(name="coverArticleNameOnly", attributes={
        @FetchAttribute(name="articleName")
    })
})
@Table(name="ART")
public class Article {

    @Id private long id;

    @Id private String ArticleName;
}

次に、Magazine レコードを取得する前に、次の呼び出しを行います。

getEntityManager().getFetchPlan().addFetchGroup("coverArticleNameOnly");

残念なことに、上記でわかるように、維持したい Magazine クラスのすべてのフィールドのフェッチ グループにフェッチ属性を追加する必要があります。

詳細については、http://openjpa.apache.org/builds/1.0.4/apache-openjpa-1.0.4/docs/manual/ref_guide_fetch.htmlを参照してください。

于 2012-09-19T04:32:41.990 に答える