2

当我想更新 jpa 中的列表时,表格保持为空。完全没有错误。存在获取器和设置器,只是未在此处列出。

这是我的课:

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;
    }
}
4

1 回答 1

3

代码应该添加一个@JoinTable注释来定义拥有实体上的多对多关系,在这种情况下是User因为mappedBy元素指向courses字段 on User@JoinTable注释指定数据库中使用的和joinColumns关系inverseJoinColumns。您还应该在关系上指定一个cascade元素。@ManyToMany

这是一个例子。请注意,我假设了您的一些列名,并且数据库中存在一个联结表。

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
)

你也可以访问我的博客,我在这篇文章中介绍了这个主题。

于 2013-03-29T14:27:03.410 回答