tec*_*rat 7 collections jpa persist
我正在尝试将List保留在对象Team中.我无法让JPA为我坚持下去.阅读完一些帖子之后,看起来您需要通过List <>进行迭代,并单独保存每个帖子.这对我来说似乎不对.JPA必须有办法自动保持List的自动化.
我是否错过了一种简单的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;
...
}
Run Code Online (Sandbox Code Playgroud)
玩家类:
@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;
...
}
Run Code Online (Sandbox Code Playgroud)
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...");
Run Code Online (Sandbox Code Playgroud)
这些都失败了:
assertTrue(queryTeam.getPlayers().size()>0);
assertNotNull(queryTeam.getPlayers().get(0));
assertTrue(queryTeam.getPlayers().size()==2);
Run Code Online (Sandbox Code Playgroud)
添加此代码:
@Override
public void createTeam(Team team) throws ClubDAOException {
em.persist(team);
for (Player player : team.getPlayers())
{
this.createPlayer(player);
//em.persist(player);
}
Run Code Online (Sandbox Code Playgroud)
好吧,我要回答我自己的问题,因为我想在这里看到一个......
感谢 JB Nizet 为我解决了这个问题/为我指出了正确的帖子,在这里:理解注释和 JPA(hibernate)
关键是必须设置反比关系。在上面的示例中,要修复它:
player.setTeam(team);
playerb.setTeam(team);
Run Code Online (Sandbox Code Playgroud)
一旦关系双方都设置完毕,就会将其保存到数据库中。
| 归档时间: |
|
| 查看次数: |
26662 次 |
| 最近记录: |