Java 在jpa中使用多对多关系时为空表
当我想更新jpa中的列表时,表将保持为空。完全没有错误。getter和setter都存在,只是这里没有列出 以下是我的课程: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
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
)