让我们假设,我有一个简单的 Student
以及 Teacher
实体
我使用的是带有kotlin jpa插件的spring boot,因此数据类应该可以正常工作:
data class Student(
@Id
@GeneratedValue(strategy = IDENTITY)
val id: Long = null,
@OneToOne(fetch = FetchType.LAZY)
var responsibleTeacher: Teacher,
// ... other props
)
data class Teacher(
@Id
@GeneratedValue(strategy = IDENTITY)
val id: Long = null,
val name: String,
// ... other props
)
我的问题是:构造一个 Student
,我始终需要的示例(已持久化) Teacher
也。因为我只有 ID
对于手边的老师,我首先要获得满分 Teacher
实体,然后将其传递给 Student
:
val responsibleTeacher = getTeacherFromDB(teacherId)
val student = Student(responsibleTeacher)
我只想通过 Teacher
构造函数中的id,但仍然能够查询完整的 Teacher
实体来源 Student
调用getter/属性时。
data class Student(
@Id
@GeneratedValue(strategy = IDENTITY)
val id: Long = null,
@Column(name = "responsible_teacher_id")
private var responsibleTeacherId: Long,
// ... other props
// pseudo-code, doesn't work!
// Should query the [Teacher] Entity by [responsibleTeacherId], specified in constructor
@OneToOne(fetch = LAZY)
var responsibleTeacher:Teacher
)
我花了将近一天的时间来处理这个问题,但找不到任何有效的解决办法。有吗?
2条答案
按热度按时间bttbmeg01#
为此,您可以使用一个代理,通过调用
entityManager.getReference(Teacher.class, teacherId)
jv4diomz2#
使用
@JoinColumn
注解