Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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
Java 如何使用JPA更改GAE数据存储中一个实体的父级?_Java_Google App Engine_Jpa - Fatal编程技术网

Java 如何使用JPA更改GAE数据存储中一个实体的父级?

Java 如何使用JPA更改GAE数据存储中一个实体的父级?,java,google-app-engine,jpa,Java,Google App Engine,Jpa,如何从父实体中删除一个实体并将其添加到另一个父实体? 这是我的密码团队有一个列表,而玩家与其上级有关联: Player player = entityManager.find(Player.class, playerKey); Team team1 = player.getTeam(); team1.getPlayers().remove(player); // this action will cascade the deletion of player; entityManager.merg

如何从父实体中删除一个实体并将其添加到另一个父实体? 这是我的密码<代码>团队有一个
列表
,而
玩家
与其上级有关联:

Player player = entityManager.find(Player.class, playerKey);
Team team1 = player.getTeam();
team1.getPlayers().remove(player); // this action will cascade the deletion of player;
entityManager.merge(team1);

Team team2 = entityManager.find(Team.class, team2Key);
team2.getPlayers().add(player);
entityManager.merge(team2);
这是我想做的,但会导致失败。我想我可以在另一个团队中使用,但是这个方法在GAE jar(?)中不可用。

你的意思是这是一个GAE“拥有”关系?在这种情况下,您可能无法更改“所有者”,因为GAE会将其放入玩家的钥匙中

相反,如果您将关系设置为“无主”(与所有其他数据存储的所有关系一样),则显然可以重新分配它。为此,您需要使用v2.x


是的,GAE/J JPA确实支持JPA2,如果您使用的是v2.x(with)

我没有使用JPA插件v2.x,还有其他方法吗?此外,我99%的查询都会得到团队并对玩家进行迭代,因此使他们无主会有一些额外的成本,对吗?是的,无主可能会有一些(小的?)成本。对于v1.x,除了在新团队中添加的播放器上使用clone()方法外,我看不到其他真正的选择。x还允许在团队中嵌入玩家集合,从而减少读取时间。