可以使用JPA仅返回一列

时间:2012-05-03 16:04:40

标签: jpa many-to-many entity-bean

我有一个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放在某处。

你有什么想法?

由于

2 个答案:

答案 0 :(得分: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已经很好地处理了所有关系,所以只需从相关对象中获取所需的值。

答案 1 :(得分:1)

我相信我只是想出了解决这个问题的最佳方法 这个链接将是答案: my other stack overflow answer post

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

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

这样做了。