当我想更新 jpa 中的列表时,表格保持为空。完全没有错误。 getter 和 setter 都存在,只是这里没有列出。
这里是我的类(class):
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;
}
这是我保存对象的方法:
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;
}
}
最佳答案
代码应该添加一个 @JoinTable
注释来定义拥有实体的多对多关系,在本例中是 User
,因为 mappedBy
元素指向 User
上的 courses
字段。 @JoinTable
注释指定关系在数据库中使用的 joinColumns
和 inverseJoinColumns
。您还应该在 @ManyToMany
关系上指定一个 cascade
元素。
这是一个例子。请注意,我假设了您的一些列名,并且数据库中存在一个联结表。
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;
}
此示例假定您的数据库包含下表
create table USER_COURSE(
USER_ID integer,
COURSE_ID integer
)
您也可以访问我的博客,我在 post 中介绍了这个主题.
关于java - 在 jpa 中使用多对多关系时的空表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15705190/