Hibernate 多对多映射属性值类型不应为持久实体

Hibernate 多对多映射属性值类型不应为持久实体,hibernate,annotations,mappings,Hibernate,Annotations,Mappings,我使用带注释的hibernate,我创建了两个实体,一个是用户名,另一个是聊天室。我想定义双向多对多映射。但在一个实体中,它不允许我应用多对多注释,并给出错误“多对多映射属性值类型不应为持久实体” 这里是实体 package com.ciit.onlineexam.model; import com.ciit.onlineexam.util.Mailer; import org.apache.commons.io.FileUtils; import javax.jws.soap.SOAPBi

我使用带注释的hibernate,我创建了两个实体,一个是用户名,另一个是聊天室。我想定义双向多对多映射。但在一个实体中,它不允许我应用多对多注释,并给出错误“多对多映射属性值类型不应为持久实体” 这里是实体

package com.ciit.onlineexam.model;

import com.ciit.onlineexam.util.Mailer;
import org.apache.commons.io.FileUtils;

import javax.jws.soap.SOAPBinding;
import javax.persistence.*;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.*;

@Entity
@Table(name="users")

public class User implements Serializable{



    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id_users")
    public int getId_user() {
        return id_user;
    }
    private int id_user;
    public void setId_user(int id_user) {
        this.id_user = id_user;
    }


    @Column(name = "email")
    private String email;

    @Column(name="password")
    private String password;

    @Column(name = "name")
    private String name;

    private String reg_id;
    private String contact;

    @Column(name="isInformed")
    private boolean informed;

//Giving error on this list
@ManyToMany(cascade = CascadeType.ALL)
    private List<Chatroom> chatrooms = new ArrayList<Chatroom>(0);

  public User(){}


    public List<Chatroom> getChatrooms() {
        return chatrooms;
    }

    public void setChatrooms(List<Chatroom> chatrooms) {
        this.chatrooms = chatrooms;
    }


    public boolean isInformed() {
        return informed;
    }


    public void setInformed(boolean informed) {
        this.informed = informed;
    }



    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getReg_id() {
        return reg_id;
    }



    //public void setClas(Set<Clas> clas) {
      //  this.clas=clas;
    //}

    public void setReg_id(String reg_id) {
        this.reg_id = reg_id;
    }

    public String getContact() {
        return contact;
    }

    public void setContact(String contact) {
        this.contact = contact;
    }


    @OneToMany(mappedBy = "primaryKey.user",cascade = CascadeType.ALL)
    public Set<ClassesStudents> getClassesStudents() {
        return  classesStudents;
    }
    private Set<ClassesStudents> classesStudents;




    public void setClassesStudents(Set<ClassesStudents> classesStudents) {
        this.classesStudents = classesStudents;
    }



    public List<User> sendMailForAccountDetails(List<User> users, String path) throws Exception {
        List<User> users1 = new ArrayList<User>();
        for (User user : users) {
            if (!user.isInformed()) {
                Mailer mailer = new Mailer();
                String subject = "You have been added to AcademicsTOOLS ";
                String emailContents = FileUtils.readFileToString(new File(path + "emailTemplates" + "/" + "SendAccountDetails.html"));
                emailContents = emailContents.replaceAll("-AddedStudentName-", user.getName());
                emailContents = emailContents.replaceAll("-emailId-", user.email);
                emailContents = emailContents.replaceAll("-accountPassword-", user.getPassword());
              //  emailContents = emailContents.replaceAll("-ProfileLink-", path);
                mailer.postMail(user.email, subject, emailContents);
                user.setInformed(true);
                users1.add(user);
                System.out.println("Reached in email AD ==================================================");
            }
        }
        return users1;
    }



    public User sendMailForAccountDetails(User user, String path) throws Exception {
        List<User> users = new ArrayList<User>();
        users.add(user);
        sendMailForAccountDetails(users, path);
        user.setInformed(true);
        return user;
    }


    @Override
    public String toString() {
        return "User{" +
                "id_user=" + id_user +
                ", email='" + email + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                ", reg_id='" + reg_id + '\'' +
                ", contact=" + contact +
                '}';
    }


}
package com.ciit.onlineexam.model;
导入com.ciit.onlineexam.util.Mailer;
导入org.apache.commons.io.FileUtils;
导入javax.jws.soap.SOAPBinding;
导入javax.persistence.*;
导入java.io.File;
导入java.io.IOException;
导入java.io.Serializable;
导入java.util.*;
@实体
@表(name=“users”)
公共类用户实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id\u用户”)
public int getId_user(){
返回id\u用户;
}
私有int id_用户;
public void setId_user(int id_user){
this.id\u user=id\u user;
}
@列(name=“email”)
私人字符串电子邮件;
@列(name=“password”)
私有字符串密码;
@列(name=“name”)
私有字符串名称;
私有字符串注册表id;
私人字符串联系人;
@列(name=“IsInfo”)
私人信息;
//此列表中的给定错误
@多个(级联=级联类型.ALL)
私有列表聊天室=新的ArrayList(0);
公共用户(){}
公共列表getChatrooms(){
返回聊天室;
}
公共聊天室(列出聊天室){
this.chattrooms=聊天室;
}
公共布尔值isInformed(){
通知返回;
}
公共无效设置通知(布尔通知){
这是知情的;
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getReg_id(){
返回注册表id;
}
//公共无效集合类别(集合类别){
//this.clas=clas;
//}
public void setReg\u id(字符串reg\u id){
this.reg\u id=reg\u id;
}
公共字符串getContact(){
回接;
}
公共无效设置联系人(字符串联系人){
this.contact=contact;
}
@OneToMany(mappedBy=“primaryKey.user”,cascade=CascadeType.ALL)
公共集GetClasseStudents(){
返回班学生;
}
私立班学生;
public void setClassesStudents(Set classesStudents){
this.classesStudents=classesStudents;
}
公共列表sendMailForAccountDetails(列表用户、字符串路径)引发异常{
List users1=new ArrayList();
for(用户:用户){
如果(!user.isInformed()){
Mailer-Mailer=新的Mailer();
String subject=“您已被添加到凳子中”;
字符串emailContents=FileUtils.readFileToString(新文件(路径+“emailTemplates”+“/”+“SendAccountDetails.html”);
emailContents=emailContents.replaceAll(“-AddedStudentName-”,user.getName());
emailContents=emailContents.replaceAll(“-emailId-”,user.email);
emailContents=emailContents.replaceAll(“-accountPassword-”,user.getPassword());
//emailContents=emailContents.replaceAll(“-ProfileLink-”,路径);
mailer.postMail(user.email、主题、emailContents);
user.setInformed(true);
users1.add(用户);
System.out.println(“在电子邮件广告中获得)======================================================================================”;
}
}
返回用户1;
}
公共用户sendMailForAccountDetails(用户用户,字符串路径)引发异常{
列表用户=新建ArrayList();
用户。添加(用户);
sendMailForAccountDetails(用户、路径);
user.setInformed(true);
返回用户;
}
@凌驾
公共字符串toString(){
返回“用户{”+
“id_user=“+id_user”+
“,email='”+email+'\''+
,password=''+password+'\''+
“,name=”“+name+”\“””+
“,reg\u id=”“+reg\u id+”\”+
“,contact=“+contact+
'}';
}
}
另一类是聊天室

package com.ciit.onlineexam.model;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Entity
@Table(name = "Chatroom")
public class Chatroom {

    @Column(name="Creator",nullable = false)
    private int creator;

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    @Column(name="id_chatroom")
    private int id;

    @Column(name="Name",nullable = false)
    private String name;

    @Column(name="Description")
    private String description;

    @Column(name = "Category")
    private String category;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "userschatrooms",
            joinColumns = { @JoinColumn(name = "id_chatroom",nullable = false)},
            inverseJoinColumns = { @JoinColumn(name = "id_users")})
    private List<User> listOfUsers = new ArrayList<User>(0);

    public Chatroom(){}

    public String getName() {
        return name;
    }

    public void setName(String group_name) {
        this.name = group_name;
    }


    public int getCreator() {
        return creator;
    }

    public void setCreator(int group_creator) {
        this.creator = group_creator;
    }


    public int getId() {
        return id;
    }

    public void setId(int group_id) {
        this.id = group_id;
    }


    public String getDescription() {
        return description;
    }

    public void setDescription(String group_description) {
        this.description = group_description;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public void setListOfUsers(List<User> listOfStudents) {
        this.listOfUsers = listOfStudents;
    }

    public List<User> getListOfUsers() {
        return listOfUsers;
    }

}
package com.ciit.onlineexam.model;
导入javax.persistence.*;
导入java.util.ArrayList;
导入java.util.HashSet;
导入java.util.List;
导入java.util.Set;
@实体
@表(name=“聊天室”)
公共课堂聊天室{
@列(name=“Creator”,null=false)
私有int创建者;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id\u聊天室”)
私有int-id;
@列(name=“name”,nullable=false)
私有字符串名称;
@列(name=“Description”)
私有字符串描述;
@列(name=“Category”)
私有字符串类别;
@多个(级联=级联类型.ALL)
@JoinTable(name=“userschatrooms”,
joinColumns={@JoinColumn(name=“id\u chatroom”,nullable=false)},
inverseJoinColumns={@JoinColumn(name=“id\u users”)})
私有列表listOfUsers=新的ArrayList(0);
公共聊天室(){}
公共字符串getName(){
返回名称;
}
public void setName(字符串组名称){
this.name=组名称;
}
public int getCreator(){
回归创造者;
}
公共无效集合创建者(int group_创建者){
this.creator=组\创建者;
}
公共int getId(){
返回id;
}
公共无效集合id(内部组\u id){
this.id=组\u id;
}
公共字符串getDescription(){
返回说明;
}
公共vo