Java Hibernate@EmbeddeId包含具有继承的实体的外键

Java Hibernate@EmbeddeId包含具有继承的实体的外键,java,database,hibernate,jpa,Java,Database,Hibernate,Jpa,以此作为我的基点: 我有一个名为Attention的实体,它有一个和emebedid AttendacneId,该AttendacneId有两个列,分别是string和studenId(UUID)。考勤实体还具有其他属性,其中包含使用@MapsId与student和Teacher enity的多通关系。学生扩展id所在的用户实体。现在,当我试图保存任何内容时,会出现此错误 java.util.NoSuchElementException at java.util.ArrayList$Itr.ne

以此作为我的基点:

我有一个名为Attention的实体,它有一个和emebedid AttendacneId,该AttendacneId有两个列,分别是string和studenId(UUID)。考勤实体还具有其他属性,其中包含使用@MapsId与student和Teacher enity的多通关系。学生扩展id所在的用户实体。现在,当我试图保存任何内容时,会出现此错误

java.util.NoSuchElementException
at java.util.ArrayList$Itr.next(ArrayList.java:860)
at org.hibernate.cfg.annotations.TableBinder.linkJoinColumnWithValueOverridingNameIfImplicit(TableBinder.java:724)
at org.hibernate.cfg.PkDrivenByDefaultMapsIdSecondPass.doSecondPass(PkDrivenByDefaultMapsIdSecondPass.java:37)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1684)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1641)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:286)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:473)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:84)
at utility.Utils.<clinit>(Utils.java:60)
at utility.Testing.main(Testing.java:21)
我的出勤课

@Entity
@Table(name = "attendance")
public class Attendance implements Serializable {

@EmbeddedId
@Getter
@Setter(AccessLevel.PRIVATE)
private AttendanceId id;
// other fields


@ManyToOne(fetch = FetchType.LAZY)
@MapsId("lectureId")
private Lecture lecture;

@ManyToOne(fetch = FetchType.LAZY)
@MapsId("studentId")
private Student student;
}
我的学生班

@Entity
@PrimaryKeyJoinColumn(name = "id")
public class Student extends User implements Serializable, 
Comparable<Student> {
// other fields

@OneToMany(mappedBy = "student", fetch = FetchType.LAZY)
@Getter
private List<Attendance> attendances = new ArrayList<>();
}
我的课堂

@NamedNativeQueries(
    @NamedNativeQuery(name = "getLectureId", query = "select 
       get_lecture_id()")
    )
@Entity
@Table(name = "lecture")
public class Lecture implements Serializable {

@Id
@Column(name = "id")
@GenericGenerator(name = "lectureIdGenerator",
        strategy = "entities.LectureIdGenerator")
@GeneratedValue(generator = "lectureIdGenerator")
@Getter
@Setter
private String id;

@OneToMany(mappedBy = "lecture", fetch = FetchType.LAZY)
@Getter
private List<Attendance> attendances = new ArrayList<>();
// other fields
}
@namednaviequiries(
@NamedNativeRequesty(name=“get讲师ID”,query=“选择
获取“\u讲座”\u id()”)
)
@实体
@表(name=“讲座”)
公共类讲座实现可序列化{
@身份证
@列(name=“id”)
@GenericGenerator(name=“讲师生成器”,
strategy=“entities.generator”)
@GeneratedValue(generator=“generator”)
@吸气剂
@塞特
私有字符串id;
@OneToMany(mappedBy=“touch”,fetch=FetchType.LAZY)
@吸气剂
私人列表出席人数=新建ArrayList();
//其他领域
}

我认为遗产造成了一个问题。还有其他类/实体扩展了用户实体。如果有人能帮我找到问题,那就太好了。谢谢。

此问题是由Hibernate问题引起的。

此问题是由Hibernate问题引起的。

我已将所有实体添加到Hibernate 5包中。如果您发现任何错误或不符合标准,请告诉我。我愿意接受任何形式的反馈。我已经修改了类ormunitestcase.java中的测试用例。如果您发现任何问题,请告诉我。谢谢你的帮助。您的项目未编译。缺少导入和依赖项。此外,删除所有不必要的实体。您只需要添加与您的问题相关的实体。我已删除依赖项。如果仍然不起作用,请告诉我。非常感谢。还是一样的问题。现在试试吧。我已经更新了实体,并且能够复制它。谢谢。我已将所有实体添加到hibernate 5包中。如果您发现任何错误或不符合标准,请告诉我。我愿意接受任何形式的反馈。我已经修改了类ormunitestcase.java中的测试用例。如果您发现任何问题,请告诉我。谢谢你的帮助。您的项目未编译。缺少导入和依赖项。此外,删除所有不必要的实体。您只需要添加与您的问题相关的实体。我已删除依赖项。如果仍然不起作用,请告诉我。非常感谢。还是一样的问题。现在试试吧。我已经更新了实体,并且能够复制它。非常感谢。
@Entity
@Table(name = "users", uniqueConstraints = {
    @UniqueConstraint(columnNames = {"email", "username"})})
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class User implements Serializable {


@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(columnDefinition = "UUID")
@Getter(AccessLevel.PUBLIC)
@Setter(AccessLevel.PUBLIC)
private UUID id;
// other fields.
}
@NamedNativeQueries(
    @NamedNativeQuery(name = "getLectureId", query = "select 
       get_lecture_id()")
    )
@Entity
@Table(name = "lecture")
public class Lecture implements Serializable {

@Id
@Column(name = "id")
@GenericGenerator(name = "lectureIdGenerator",
        strategy = "entities.LectureIdGenerator")
@GeneratedValue(generator = "lectureIdGenerator")
@Getter
@Setter
private String id;

@OneToMany(mappedBy = "lecture", fetch = FetchType.LAZY)
@Getter
private List<Attendance> attendances = new ArrayList<>();
// other fields
}