java - Hibernate @embededId 包含具有继承的实体的外键
问题描述
我有一个名为Attendance 的实体,它有一个emebedid AttendacneId,它有两列lectureId(字符串)和studenId(UUID)。出勤实体还具有其他属性,其中包含使用 @MapsId 与学生和讲座实体建立多对一关系。学生扩展了 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)
我的 AttendanceId 班级
@Embeddable
public class AttendanceId implements Serializable {
@Column(name = "lecture_fid")
@Getter
@Setter
private String lectureId;
@Column(name = "student_fid", columnDefinition = "uuid")
@Getter
@Setter
private UUID studentId;
public AttendanceId() {}
}
我的考勤班
@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<>();
}
我的用户类
@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
}
我认为继承引起了问题。还有其他类/实体可以扩展用户实体。如果有人可以帮助我找到问题,那就太好了。谢谢你。
解决方案
此问题是由HHH-7135休眠问题引起的。
推荐阅读
- ibm-cloud - IBM Cloud 帐户已停用
- asp.net-web-api2 - AAD 身份验证后,我的 webAPI 在 http 而不是 https 上重定向
- amazon-web-services - 无法恢复 AWS EC2 公共 IP 地址
- powershell - 如何在 Windows Server Core 中设置默认 Powershell 版本
- pandas - 如何根据熊猫的范围进行匹配
- php - Stripe Prebuilt Checkout Session 在 Laravel 8 中返回 404 错误
- python - 是否可以在单行上使用 pandas.replace 函数?
- python - 按随机生成的权重对元组进行排序
- azure - 如何使用 azure 数据工厂将数据从 azure SQL 数据库增量存储到 azure blob 存储,基于某些条件:需要更新日期
- javascript - 我无法获得我想要的对象值