openJPA单列中的直接关系

时间:2012-08-30 18:34:56

标签: element openjpa

我有一个非常愚蠢的问题。

是否可以建立一个直接关系,只从子关系中拉回一个列... 示例...

@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,你可以从另一个表中获得一个Elements集合,你如何将单个值返回到该元素中?

1 个答案:

答案 0 :(得分: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;
}

然后,在您检索杂志记录之前,请进行以下呼叫:

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

如上所述,不幸的是,您需要为您想要保留的Magazine类中的所有字段添加fetch组的fetch属性。

有关详细信息,请参阅http://openjpa.apache.org/builds/1.0.4/apache-openjpa-1.0.4/docs/manual/ref_guide_fetch.html