Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以使用JPA只返回一列_Jpa_Many To Many_Entity Bean - Fatal编程技术网

可以使用JPA只返回一列

可以使用JPA只返回一列,jpa,many-to-many,entity-bean,Jpa,Many To Many,Entity Bean,我有一个开放的JPA实体,它成功地连接了多对多关系。现在我成功地获得了整个表,但我真的只需要该表的ID。我计划稍后调用数据库来重建我需要的实体(根据我的程序流程)。 我只需要ID(或该表中的一列)。 1) 我应该尝试在我的实体bean中,或者在我将用来调用实体bean的无状态会话bean中限制它吗 2) 如果我尝试使用JPA执行此操作,我如何指定我只从表中而不是从整个表中获取ID?到目前为止,在网上,我看不到一种方法,你可以做到这一点。所以我猜没有办法做到这一点。 3) 如果我只是简单地操作返回

我有一个开放的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;
这就是我如何调用实体bean的方法。我想这就是我必须通过编程创建一个类似实体bean的自定义对象的地方(但它只有ID而不是整个表,并试图将ID放在其中的某个地方)

你的想法是什么


谢谢

听起来您希望在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;
}
@Transient
公共列表GetDistributionListId(){
List DistributionListId=new LinkedList();
List distributionlistList=getDistributionlistList();
if(distributionlistList!=null){
for(DistributionList DistributionList:distributionlistList)
add(distributionList.getId());
}
返回分配列表;
}

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

我相信我刚刚找到了解决此问题的最佳解决方案。
这个链接就是答案:

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

@ElementCollection(fetch=FetchType.EAGER)
        @CollectionTable(name="QUICK_LAUNCH_DISTLIST",joinColumns=@JoinColumn(name="QUICK_LAUNCH_ID"))
        @Column(name="LIST_ID")
private List<Long> distListIDs;
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name=“QUICK\u LAUNCH\u DISTLIST”,joinColumns=@JoinColumn(name=“QUICK\u LAUNCH\u ID”))
@列(name=“LIST\u ID”)
私有列表distListIDs;

就是这样。

现在您返回了“整个表”,我认为这意味着distributionlistList包含您想要的所有相关DistributionList对象。在distributionlistList中遍历每个DistributionList,调用其.getId()有什么错,并将其存储在新列表中?JPA返回整个表,因为它的抽象是整个对象而不是任意列存储在数据库中。通常打破抽象不是正确的答案。我需要这样做。但我还需要创建一个新对象并返回给用户,而不是quickLaunch O这是可行的。我想对于这个特殊的例子,拥有这个功能会很好。这就是我想的。我需要替换我的多对多关系,对吗?我可以摆脱它,然后得到那些id…你怎么称呼GetDistributionList?我想我需要保留我的多对多关系。您可能会将定义更改为OneToMany,但您需要ToMany部分。毕竟,您在逻辑上试图获取与任何给定QuickLaunch关联的所有潜在多个分发列表,对吗?这是OneToMany。但如果任何分发列表可能属于多个QuickLaunch,那么您又回到了ManyToMany。我的直觉是您的关系设置正确,但您还不习惯操作它们。GetDistributionList是
私有列表distributionlistList
的getter。如果GetDistributionListId有效,为什么还要更改任何其他内容?我是否需要在我的JPA对象中设置实体管理器?我实际上如何获取所需的数据?我想知道ted是瞬态类型btw,我在返回结果中没有看到它?
@ElementCollection(fetch=FetchType.EAGER)
        @CollectionTable(name="QUICK_LAUNCH_DISTLIST",joinColumns=@JoinColumn(name="QUICK_LAUNCH_ID"))
        @Column(name="LIST_ID")
private List<Long> distListIDs;