gpt4 book ai didi

jpa - 如何使用JPA将对象中的Collections/List持久化

转载 作者:行者123 更新时间:2023-12-04 12:08:52 25 4
gpt4 key购买 nike

我正在尝试将列表保留在对象团队中。我无法让JPA为我坚持下去。阅读了一些帖子后,您似乎需要遍历List <>,并逐一保存每个帖子。这对我来说似乎不对。 JPA必须有一种方法可以自动神奇地保留该列表。

我是否缺少一种轻松持久存储这些对象的简单JPA方法?

团队类:

@Entity
@Table(name = "rahCLUB_TEAM")
public class Team implements Serializable{
....
@OneToMany(fetch=FetchType.EAGER, mappedBy = "team", cascade={CascadeType.PERSIST, CascadeType.REMOVE})
private List<Player> players;
...
}

玩家等级:
@Entity
@PrimaryKeyJoinColumn(name="id")
@Table(name = "rahCLUB_PLAYER")

public class Player extends Individual implements Serializable{
...
@ManyToOne
@JoinTable(name="rahCLUB_PLAYER_TEAM_LINK")
private Team team;
...
}

JPAClubDAOTest:
//create a valid team code
...
Team team = new Team();
team.setName("Pittsburgh Pirates");
team.setLeague("NFL");
team.setGroup("group");
team.setLevel("AAA");

Player player = new Player();
player.setFirstName("firstNameA");
player.setLastName("lastNameA");
player.setEmail("emaila@email.com");
player.setLogin("loginA");
player.setJerseyNo(22);
player.setPosition("fullback");
Date dob =new SimpleDateFormat("dd/MM/yyyy").parse("21/11/1986");
player.setDob(dob);

Player playerb = new Player();
playerb.setFirstName("firstNameB");
playerb.setLastName("lastNameB");
playerb.setEmail("emailB@email.com");
playerb.setLogin("loginB");
playerb.setJerseyNo(15);
playerb.setPosition("widereceiver");
Date dobb =new SimpleDateFormat("dd/MM/yyyy").parse("06/06/1986");
playerb.setDob(dobb);

ArrayList<Player> players = new ArrayList<Player>();
players.add(player);
players.add(playerb);

team.setPlayers(players);

Team queryTeam = em.find(Team.class, team.getId());
log.debug("checking coach...");

这些都失败了:
assertTrue(queryTeam.getPlayers().size()>0);
assertNotNull(queryTeam.getPlayers().get(0));
assertTrue(queryTeam.getPlayers().size()==2);

添加代码的代码:
@Override
public void createTeam(Team team) throws ClubDAOException {
em.persist(team);
for (Player player : team.getPlayers())
{
this.createPlayer(player);
//em.persist(player);
}

最佳答案

好吧,我要回答我自己的问题,因为我想在这里看到一个...

感谢JB Nizet帮我解决这个问题/将我指向正确的位置,这里:Understanding annotations and JPA(hibernate)

关键是必须设置逆关系。在上面的示例中,要解决此问题,请执行以下操作:

player.setTeam(team);
playerb.setTeam(team);

关系的双方都设置好之后,就将其持久保存到数据库中。

关于jpa - 如何使用JPA将对象中的Collections/List持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19915748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com