Java JPA ManyToMany未填充对象属性
在JPA中,我试图为JPA对象创建一个更新屏幕,其中包含该对象的类别列表。这是一种多对多的关系 我正在JPA对象内的表上创建具有以下属性的连接关系 Classes.javaJava JPA ManyToMany未填充对象属性,java,jpa,Java,Jpa,在JPA中,我试图为JPA对象创建一个更新屏幕,其中包含该对象的类别列表。这是一种多对多的关系 我正在JPA对象内的表上创建具有以下属性的连接关系 Classes.java @JoinTable(name = "classes_has_class_categories",joinColumns = { @JoinColumn(name = "classes_id", referencedColumnName = "id")}, inverseJoinColumns = { @JoinColumn
@JoinTable(name = "classes_has_class_categories",joinColumns = {
@JoinColumn(name = "classes_id", referencedColumnName = "id")}, inverseJoinColumns = {
@JoinColumn(name = "class_categories_id", referencedColumnName = "id")})
@ManyToMany(cascade = CascadeType.ALL)
private Collection<ClassCategories> classCategoriesCollection;
稍后在代码中
request.setAttribute("classCategories",cl.getClassCategoriesCollection());
在重新编译应用程序之前没有正确的类 当您的关系没有额外参数时,为什么要为M_N关系表设置一个
ClassHasCategories
类?由于Classes
与ClassCategories
有@manytomy(cascade=CascadeType.ALL)
关系,因此您需要做的就是:
classObj.getClassCategoriesCollection().add(classCategoryObj);
em.merge(classObj).
提供者将负责更新关系表。您还可以使用类似的逻辑从classCategoriesCollection
中删除项目:
classObj.getClassCategoriesCollection().remove(classCategoryObj);
em.merge(classObj).
因此,答案是:
- 如果
没有列,只有带有两个FK的pk,则使用classes\u有\u class\u categories
和classhascegories
。使用classhascegoriespk
更新关系表classCategoriesCollection
- 如果
有额外的列,则以classes\u有\u class\u categories
有两个classhascegoriespk
关系的方式重新进行映射,分别用于@manytone
和classes
。通过直接操作ClassCategories
更新关系。这是一个代码示例classhascegories
@manytomy
关系和一个单独的classhascegories
对象)
干杯,谢谢,JPA新手,我还在想如何恰当地映射关系。我需要一本可靠的书。很高兴为您服务。JPA有它的特质,有些特质甚至会让经验丰富的程序发疯,直到他们在实践中发现事情应该如何做。我能说的是:“去过那里,做到了”。
classObj.getClassCategoriesCollection().remove(classCategoryObj);
em.merge(classObj).