Comment faire pour conserver les Collections/Liste à l'intérieur d'un objet à l'aide de JPA
J'essaie de conserver une Liste à l'intérieur d'un objet Équipe. Je ne peux pas obtenir JPA pour persister pour moi. Après avoir lu quelques posts, on dirait que vous êtes nécessaire pour effectuer une itération à travers la Liste des<>, et persistent à chacun d'eux individuellement. Cela ne semble tout simplement pas le droit de me. Il doit y avoir moyen de JPA persister que la Liste d'auto-magiquement.
Ai-je raté un facile JPA-chemin de profondément la persistance de ces objets?
Classe d'équipe:
@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;
...
}
Joueur de classe:
@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("[email protected]");
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("[email protected]");
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...");
D'échec:
assertTrue(queryTeam.getPlayers().size()>0);
assertNotNull(queryTeam.getPlayers().get(0));
assertTrue(queryTeam.getPlayers().size()==2);
Code à ajouter ceci:
@Override
public void createTeam(Team team) throws ClubDAOException {
em.persist(team);
for (Player player : team.getPlayers())
{
this.createPlayer(player);
//em.persist(player);
}
Où est le code de l'ajout de joueurs à l'équipe? À lire: c'est la troisième fois aujourd'hui je réponds à cette question: stackoverflow.com/questions/19896025/...
Lisez ce que votre code ne. Il n'est pas de créer n'importe quel joueur. Il parcourt la liste vide de joueurs de votre nouvelle équipe. À un certain moment, vous avez besoin d'avoir
Lorsque je passe dans l'objet de l'Équipe, il a une Liste déjà existante des Joueurs. J'appelle
OK. Donc, le vote pour la fermer parce que c'est un doublon de stackoverflow.com/questions/19896025/.... Vous avez ajouté les joueurs de l'équipe, mais je n'ai pas mis l'équipe des joueurs.
D'accord pour fermer.. mais peut-on combiner certains de cela? Le titre "Comment faire pour conserver les Collections/Liste à l'intérieur d'un objet à l'aide de JPA" est beaucoup plus descriptive que "la Compréhension des annotations et JPA(hibernate)"
Lisez ce que votre code ne. Il n'est pas de créer n'importe quel joueur. Il parcourt la liste vide de joueurs de votre nouvelle équipe. À un certain moment, vous avez besoin d'avoir
new Player()
dans votre code pour créer un Joueur.Lorsque je passe dans l'objet de l'Équipe, il a une Liste déjà existante des Joueurs. J'appelle
new Player()
dans la région, j'ai écrasé.. je vais copier coller dans le code plus.OK. Donc, le vote pour la fermer parce que c'est un doublon de stackoverflow.com/questions/19896025/.... Vous avez ajouté les joueurs de l'équipe, mais je n'ai pas mis l'équipe des joueurs.
D'accord pour fermer.. mais peut-on combiner certains de cela? Le titre "Comment faire pour conserver les Collections/Liste à l'intérieur d'un objet à l'aide de JPA" est beaucoup plus descriptive que "la Compréhension des annotations et JPA(hibernate)"
OriginalL'auteur technocrat | 2013-11-11
Vous devez vous connecter pour publier un commentaire.
Bien, je vais répondre à ma propre question car j'aimerais bien les voir ici...
Bravo à JB Nizet à la résolution de ce pour moi/me pointer vers la droite post, ici: La compréhension des annotations et JPA(hibernate)
La clé est que la relation inverse doit être définie. Dans l'exemple ci-dessus, pour résoudre le problème:
Une fois que les deux côtés de la relation sont ensemble, alors il est conservé dans la base de données.
OriginalL'auteur technocrat
Vous pouvez utiliser une autre approche:
Unidirectionnel OneToMany:
http://en.wikibooks.org/wiki/Java_Persistence/OneToMany#Unidirectional_OneToMany.2C_No_Inverse_ManyToOne.2C_No_Join_Table_.28JPA_2.0_ONLY.29
Vous avez encore besoin de persister sur l'Objet, puis l'ajouter dans votre Collection.
OriginalL'auteur r1ckr