J'ai les deux classes d'entités, User et MyCharacter. L'utilisateur a une liste de MyCharacters et chaque MyCharacter a une référence à l'utilisateur (propriétaire). Ce que j'aimerais accomplir, c'est que j'utilise la même table de jointure pour les deux relations, ce qui signifie que la relation propriétaire trouvée dans MyCharacter utiliserait automatiquement la même table de jointure que User = > MyCharacter. Cela signifie que la méthode getOwner() dans MyCharacter devrait fonctionner sans que je doive appeler explicitement setOwner (utilisateur).Relation bidirectionnelle dans JPA
Pour effacer ce un peu plus, voici mon test unitaire qui échoue actuellement (dernière assert échoue)
@Test
public void testTwoWayRelation() {
User user = new User();
MyCharacter character = new MyCharacter();
List<MyCharacter> chars = new ArrayList<MyCharacter>();
chars.add(character);
user.setCharacters(chars);
facade.store(user);
assertNotNull(character.getId());
character = facade.find(MyCharacter.class, character.getId());
assertNotNull(character.getOwner());
}
Mes classes d'entités sont listées ci-dessous.
@Entity
@Table(name = "myuser")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@OneToMany(cascade = { CascadeType.PERSIST })
protected List<MyCharacter> characters;
public User() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<MyCharacter> getCharacters() {
return characters;
}
public void setCharacters(List<MyCharacter> characters) {
this.characters = characters;
}
}
@Entity
public class MyCharacter{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@ManyToOne
@JoinTable(name = "myuser_mycharacter", joinColumns = @JoinColumn(name = "characters_id"), inverseJoinColumns = { @JoinColumn(name = "user_id") })
protected User owner;
public MyCharacter() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public User getOwner() {
return owner;
}
public void setOwner(User owner) {
this.owner = owner;
}
}