Java 我试图在Springboot Jpa中使用@OneToMany关系

Java 我试图在Springboot Jpa中使用@OneToMany关系,java,spring,spring-boot,hibernate,jpa,Java,Spring,Spring Boot,Hibernate,Jpa,我试图在我的项目中使用@OneToMany关系,但出现错误:org.hibernate.AnnotationException:非法尝试将非集合映射为@OneToMany、@manytomy或@collectionfelments:com.digitalProfile.digitalProfile.entity.Education.faculty 我正在使用JDK11 My Education.java模型如下所示: package com.digitalProfile.digitalProfi

我试图在我的项目中使用@OneToMany关系,但出现错误:org.hibernate.AnnotationException:非法尝试将非集合映射为@OneToMany、@manytomy或@collectionfelments:com.digitalProfile.digitalProfile.entity.Education.faculty

我正在使用JDK11 My Education.java模型如下所示:

package com.digitalProfile.digitalProfile.entity;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="Education")
public class Education extends BaseEntity {

private String name;
private String establishDateNepali;
private String establishDateEnglish;
@OneToOne
private OwnedType ownedType;
private double area;
private int teacherCount;
private int studentCount;
private int staffCount;
@OneToOne
private AcademicLevel academicLevel;

@OneToMany(mappedBy = "education", fetch = FetchType.LAZY,
        cascade = CascadeType.ALL)
private Faculty faculty;

private String province;
private String district;
private String munvdc;
private String ward;
private String gauntole;
private String streetname;
private String city;
  
  

//getter setter
package com.digitalProfile.digitalProfile.entity;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table
public class Faculty extends BaseEntity{

@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "education_id", nullable = false)
private Education education;

private String name;

public String getName() {
    return name;
}

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

}
和Faculty.java如下所示:

package com.digitalProfile.digitalProfile.entity;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="Education")
public class Education extends BaseEntity {

private String name;
private String establishDateNepali;
private String establishDateEnglish;
@OneToOne
private OwnedType ownedType;
private double area;
private int teacherCount;
private int studentCount;
private int staffCount;
@OneToOne
private AcademicLevel academicLevel;

@OneToMany(mappedBy = "education", fetch = FetchType.LAZY,
        cascade = CascadeType.ALL)
private Faculty faculty;

private String province;
private String district;
private String munvdc;
private String ward;
private String gauntole;
private String streetname;
private String city;
  
  

//getter setter
package com.digitalProfile.digitalProfile.entity;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table
public class Faculty extends BaseEntity{

@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "education_id", nullable = false)
private Education education;

private String name;

public String getName() {
    return name;
}

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

}
和基础实体: 包com.digitalProfile.digitalProfile.entity

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

@MappedSuperclass
public class BaseEntity {

@Id
@Column(nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Temporal(TemporalType.TIMESTAMP)
@CreationTimestamp
@Column(updatable = false)
private Date dateCreated;

@Temporal(TemporalType.TIMESTAMP)
@UpdateTimestamp
private Date dateUpdated;

public int getId() {
    return id;
}

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

public Date getDateCreated() {
    return dateCreated;
}

public void setDateCreated(Date dateCreated) {
    this.dateCreated = dateCreated;
}

public Date getDateUpdated() {
    return dateUpdated;
}

public void setDateUpdated(Date dateUpdated) {
    this.dateUpdated = dateUpdated;
}

}

您目前已将您的教育课程定义为教师的单一参考变量:

public class Education extends BaseEntity {

    private Faculty faculty;

}
但是,如果你想在教育和教师之间建立一个单一的关系,这意味着一个教育对象需要引用多个教师对象。因此,您需要更改数据结构,以便教育类可以保存对教员对象的多个引用

这通常通过将字段定义为类似集合的列表来实现:

public class Education extends BaseEntity {

    private List<Faculty> faculties;

}

您目前已将教育课程定义为教师的单一参考变量:

public class Education extends BaseEntity {

    private Faculty faculty;

}
但是,如果你想在教育和教师之间建立一个单一的关系,这意味着一个教育对象需要引用多个教师对象。因此,您需要更改数据结构,以便教育类可以保存对教员对象的多个引用

这通常通过将字段定义为类似集合的列表来实现:

public class Education extends BaseEntity {

    private List<Faculty> faculties;

}

如果你说教育可以有多个学院,那么它应该被定义为

@OneToMany(mappedBy = "education", fetch = FetchType.LAZY,
        cascade = CascadeType.ALL)
private Set<Faculty> faculties;

如果你说教育可以有多个学院,那么它应该被定义为

@OneToMany(mappedBy = "education", fetch = FetchType.LAZY,
        cascade = CascadeType.ALL)
private Set<Faculty> faculties;