2

我有一个 Open JPA 实体,它成功地连接了多对多关系。现在我成功地得到了整个表,但我真的只想要那些表中的 ID。我计划稍后调用数据库来重建我需要的实体(根据我的程序流程)。我只需要 ID(或该表中的一列)。
1) 我是否应该尝试在我的实体 bean 或我将用来调用实体 bean 的无状态会话 bean 中限制它 2) 如果我尝试使用 JPA 执行此操作,我如何指定我只取回ID 来自表,而不是整个表?到目前为止在网上看,我看不到你可以做到这一点的方法。所以我猜没有办法做到这一点。3)如果我只是简单地操作返回值,我是否应该创建一个单独的类,我将返回给用户,只返回所需的 id 列表给用户?

我在这里可能完全错了,但从外观上看,我认为没有一种简单的方法可以使用 JPA 来做到这一点,我将不得不向用户返回一个自定义对象而不是实体 bean(这个自定义对象只会保存 id,而不是像现在这样保存整个表)

任何想法......我认为这并不重要,但人们总是要求代码,所以你去......

@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="QUICK_LAUNCH_DISTLIST",
        joinColumns=@JoinColumn(name="QUICK_LAUNCH_ID"),
        inverseJoinColumns=@JoinColumn(name="LIST_ID"))
private List<DistributionList> distributionlistList;

目前我如何获得整个记录集合。记住我只想要身份证...

    try
    {
        //int daSize = 0;
        //System.out.println("Testing 1.2..3...! ");
        qlList = emf.createNamedQuery("getQuickLaunch").getResultList();            
    }

这就是我调用实体 bean 的方式。我在想这是我必须以编程方式创建一个类似于实体 bean 的自定义对象的地方(但它只有 ID 而不是整个表,并尝试将 id 放在某个地方。

你怎么认为?

谢谢

4

2 回答 2

2

我相信我刚刚找到了解决这个问题的最佳方法。
这个链接就是答案: 我的另一个堆栈溢出答案帖子

但是为了那些懒得点击链接的人,我基本上使用了@ElementCollection 属性......

@ElementCollection(fetch=FetchType.EAGER)
        @CollectionTable(name="QUICK_LAUNCH_DISTLIST",joinColumns=@JoinColumn(name="QUICK_LAUNCH_ID"))
        @Column(name="LIST_ID")
private List<Long> distListIDs;

做到了。

于 2012-05-04T16:53:08.907 回答
1

听起来你想要在你的 quickLaunch 类中这样的东西:

@Transient
public List<Integer> getDistributionListIds () {
    List<Integer> distributionListIds = new LinkedList<Integer>();
    List<DistributionList> distributionlistList = getDistributionlistList();
    if (distributionlistList != null) {
        for (DistributionList distributionList : distributionlistList)
            distributionListIds.add(distributionList.getId());
    }
    return distributionListIds;
}

我不得不猜测一下你的 getter/setter 的名称和 DistributionList 的 ID 类型。但基本上,JPA 已经为您很好地处理了所有关系,因此只需从相关对象中获取您想要的值。

于 2012-05-03T16:58:58.460 回答