以此作为我的基点:https://vladmihalcea.com/the-best-way-to-map-a-many-to-many-association-with-extra-columns-when-using-jpa-and-hibernate/
我有一个名为 Attendance 的实体,它有一个 emebedid AttendacneId,它有两列 lectureId (string) 和 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.html" target="_blank">java:84)
at utility.Utils.<clinit>(Utils.java:60)
at utility.Testing.main(Testing.java:21)
我的出勤班
@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-7135Hibernate问题引起的。
我对平台API有问题(https://api-platform.com/)当我有一个从另一个实体继承的实体时。例如,从User实体继承的Worker实体。当我转到Platform API文档时,所有Worker属性都显示在User类中 这是一个比解释更好的模式。这是我的两个实体和问题文档的结果 这就是问题所在。我们看到 Worker 子类的属性出现在 User 类的模型中。并且当我测试发送 POS
如何使用NamedQuery在jointable上查找实体?我有一个抽象的父类/实体,带有@heritance(strategy=InheritanceType.JOINED)和两个子类/子实体。因此,在数据库中我有一个父表(SDR)和两个子表(xSdrs和ySdrs)。还有另一个表保留,它与表SDR有多对多关系。这就是为什么我在保留和特别提款权之间创建了一个连接表 我打算在父实体Sdr中使用Na
问题内容: 我有一个实体类和一个基于该实体的子类: 和 我需要发出仅在基类(A)上使用存储过程的本机查询。如果我尝试如下: 我收到有关“在ResultSet中未找到clazz_列”的错误。我假设JPA提供程序添加了此列,以便区分基类和扩展类。我可以通过显式添加clazz列和子类中的所有字段来解决此问题: 其中“ prop1”和“ prop2”是子类B的属性。但是,这似乎是不必要的修改,并且如果子类
问题内容: 我在我的班级结构上定义了一个复合ID,如下所示。不幸的是,我总是收到一个hibernate错误,抱怨找不到的“ part2”: “在实体MoreClass中找不到@IdClass的属性:第2部分” 有人可以帮我解决问题吗?(或者至少在一个有用的jpa / hibernate文档上指向我?) 问题答案: 居然撞到了。 如: 确实可行,我认为这是一个错误。参见https://hiberna
尝试获取父实体(Msg)的实体,其中父PK (msg_id)是子实体中的FK时,尝试保持子实体(MsgRetry)时出错。 错误,如:org.hibernate.id.IdentifierGenerationException:试图从null一对一属性分配id 父实体,不需要知道子实体(至少我认为它不需要知道)。一旦子实体被持久化,我就会尝试也持久化父实体。我可以通过在子实体中没有父实体并调用关联
我正在用JpaRepository处理JPA/Hibernate实体。我有几个实体与和关系。为了使代码简短,我将实体命名为A、B、C、D等。. A是根实体,链下有继承与连接策略。请看下面的代码- A.java B.java C.java D. java E.java f. java G.java H.java I.java 如果您看到继承从实体D作为父实体开始,那么G和F扩展了D。我需要通过Eni