Hi,
I have two entities 'Person' and 'Team' which are mapped by a bidirectional many-to-many relation using annotations, as follow:
Code:
@Entity
public class Perosn implements Serializable {
....
private Collection<Team> teams;
....
@ManyToMany(cascade = {javax.persistence.CascadeType.PERSIST, javax.persistence.CascadeType.MERGE})
@JoinTable(name = "person_team",
joinColumns = { @JoinColumn(name = "person_id")},
inverseJoinColumns = {@JoinColumn(name = "team_id")})
public Collection<Team> getTeams() {
return advisers;
}
}
,
Code:
@Entity
public class Team implements Serializable {
....
private Collection<Person> persons;
....
@ManyToMany(mappedBy = "teams",
cascade = {javax.persistence.CascadeType.PERSIST, javax.persistence.CascadeType.MERGE})
public Collection<Person> getPersons() {
return persons;
}
}
my service class{1, 2: According to 'Christian Bauer and Gavin King, Java Persistence with Hibernate by Manning Publication Co. Page 301, P 2'}:
Code:
@Service("teamService")
public class TeamService extends DataAccess {
....
public void addTeamToPerson(String teamId, String personId) {
Team team= getTeam(teamId);
Person person= personService.getPerson(personId);
//1.
person.getTeams().add(team);
//2.
team.getPersons().add(person);
super.update(team);
super.update(person);
}
....
}
Code:
public abstract class DataAccess<E> {
private EntityManager manager;
....
public void update(E object) {
try {
manager.getTransaction().begin();
manager.merge(object);
manager.getTransaction().commit();
} catch (Exception e) {
....
}
}
....
}
And my problem: Calling method 'addTeamToPerson()' does not cause to add a new record to join table 'person_team'!!!:(
Note: I traced the code line by line, there's no error or exception and the transaction commits.
Please help me solve it.