java - 在 jpa 中使用多对多关系时的空表

标签 java jpa many-to-many

当我想更新 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 注释指定关系在数据库中使用的 joinColumnsinverseJoinColumns。您还应该在 @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/

相关文章:

java - crontab 更改 jar 执行时的字符编码

java - 片段、GWT.runAsync 和 AsyncProvider

java - ANTLR 可以隐藏自动生成的文件中的第一行消息吗?

java - 在 Grails 中保存大量数据时如何强制刷新数据库?

java - 连接失败的 JPQL createNativeQuery

ruby-on-rails - 关于多对多关联 : id is not saving to database

hibernate - JPA Hibernate 多对多级联

java - 为什么我坚持了却没有任何反应?

java - Hibernate中字符串类型的外键

django - 使用南转换外键转换为ManyToManyField不工作