Java 我试图在Springboot Jpa中使用@OneToMany关系
我试图在我的项目中使用@OneToMany关系,但出现错误:org.hibernate.AnnotationException:非法尝试将非集合映射为@OneToMany、@manytomy或@collectionfelments:com.digitalProfile.digitalProfile.entity.Education.faculty 我正在使用JDK11 My Education.java模型如下所示: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
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;