问题
when i want to update a list in jpa, the tables stays empty. no error at all. Getters and setters are present, just not listed here.
here my classes:
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
@ManyToMany
private List<Course> courses;
}
public class Course implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
@ManyToMany(mappedBy="courses")
private List<User> users;
}
And here my method which is saving the objects:
public boolean addCourse(User user, Course course){
List<User> cas = new ArrayList<User>();
cas.add(user);
EntityManager em = getEntityManager();
try{
em.getTransaction().begin();
course.setUsers(cas);
em.getTransaction().commit();
em.clear();
return true;
} catch(Exception e) {
em.getTransaction().rollback();
return false;
}
}
回答1:
The code should add a @JoinTable annotation to define the many to many relationship on the owning entity, which in this case is User since the mappedBy element is pointing to the courses field on User. The @JoinTable annotation specifies the joinColumns and inverseJoinColumns the relationship uses within the database. You should also specify a cascade element on the @ManyToMany relationship.
Here is an example. Note that I have assumed some of your column names and that a junctiona table exists within the database.
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private int id;
@ManyToMany(cascade={CascadeType.ALL})
@JoinTable(name="USER_COURSE", joinColumns={@JoinColumn(name="USER_ID", referencedColumnName="USER_ID")},
inverseJoinColumns={@JoinColumn(name="COURSE_ID", referencedColumnName="COURSE_ID")})
private List<Course> courses;
}
This example assumes that your database contains the following table
create table USER_COURSE(
USER_ID integer,
COURSE_ID integer
)
You can also visit my blog where I covered this topic in this post.
来源:https://stackoverflow.com/questions/15705190/empty-tables-when-using-many-to-many-relations-in-jpa