Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在jpa中使用多对多关系时为空表_Java_Jpa_Many To Many - Fatal编程技术网

Java 在jpa中使用多对多关系时为空表

Java 在jpa中使用多对多关系时为空表,java,jpa,many-to-many,Java,Jpa,Many To Many,当我想更新jpa中的列表时,表将保持为空。完全没有错误。getter和setter都存在,只是这里没有列出 以下是我的课程: public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private int id; @ManyToMany private List<Course> courses; } pu

当我想更新jpa中的列表时,表将保持为空。完全没有错误。getter和setter都存在,只是这里没有列出

以下是我的课程:

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;
}
公共类用户实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@生成值
私有int-id;
@许多
私人名单课程;
}
公共类课程实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@生成值
私有int-id;
@许多(mappedBy=“courses”)
私人名单用户;
}
这里是我保存对象的方法:

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;
    }
}
public boolean addCourse(用户,课程){
List cas=new ArrayList();
cas.add(用户);
EntityManager em=getEntityManager();
试一试{
em.getTransaction().begin();
课程设置用户(cas);
em.getTransaction().commit();
em.clear();
返回true;
}捕获(例外e){
em.getTransaction().rollback();
返回false;
}
}

代码应添加一个
@JoinTable
注释,以定义所属实体上的多对多关系,在本例中为
用户
,因为
mappedBy
元素指向
用户
上的
课程
字段。
@JoinTable
注释指定关系在数据库中使用的
joinColumns
inverseJoinColumns
。您还应该在
@ManyToMany
关系上指定一个
级联
元素

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

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;

}

您也可以访问我的博客,我在这里介绍了这个主题。

您是否尝试过使用em.merge(当然)?谢谢凯文,现在桌子已经满了。但对象中的对象列表仍然为空。是否必须重建表?@Benj这可能是由于在实体管理器上调用
clear
。尝试删除该语句。不,不起作用。下次我获取课程或用户时,列表为空。但是为了把这条线索挖出来,桌子上都坐满了。。但是你解决过这个问题吗Benj?
create table USER_COURSE(
   USER_ID integer,
   COURSE_ID integer
)