minivac
06/04/2024, 10:39 AMval new = ProjectMemberEntity.new {
...
this.userID = userID
}
.load(ProjectMemberEntity::user) // <- crashes
class x.z.y.UserID cannot be cast to class org.jetbrains.exposed.dao.id.EntityID (x.y.z.UserID and org.jetbrains.exposed.dao.id.EntityID are in unnamed module of loader 'app')
But accessing it normally works fine
val new = ProjectMemberEntity.new {
...
this.userID = userID
}
new.user // this is fine, it resolves the user correctly
Seems like is exactly the same bug, some incorrect use of the column type.minivac
06/04/2024, 10:40 AMclass ProjectMemberEntity(...) {
var userID by ProjectMemberTable.userID
val user by UserEntity referencedOn ProjectMemberTable.userID
val project by ProjectEntity referencedOn ProjectMemberTable.projectID
}
Chantal Loncle
06/04/2024, 2:13 PMobject UserTable : UUIDTable("user")
class UserEntity(id: EntityID<UUID>) : UUIDEntity(id) {
companion object : UUIDEntityClass<UserEntity>(UserTable)
}
object ProjectMemberTable : UUIDTable("project_member") {
val userID = reference("user_id", UserTable)
}
class ProjectMemberEntity(id: EntityID<UUID>) : UUIDEntity(id) {
var userID by ProjectMemberTable.userID
val user by UserEntity referencedOn ProjectMemberTable.userID
companion object : UUIDEntityClass<ProjectMemberEntity>(ProjectMemberTable)
}
transaction {
try {
SchemaUtils.create(UserTable, ProjectMemberTable)
val user1 = UserEntity.new { }
val newPM = ProjectMemberEntity.new {
userID = user1.id
}.load(ProjectMemberEntity::user)
assertEquals(user1, newPM.user)
} finally {
SchemaUtils.drop(UserTable, ProjectMemberTable)
}
}
minivac
06/04/2024, 4:40 PMminivac
06/04/2024, 5:01 PMobject ProjectTable : UUIDTable("tmp_project")
class ProjectEntity(id: EntityID<UUID>) : UUIDEntity(id) {
companion object : UUIDEntityClass<ProjectEntity>(ProjectTable)
val members by ProjectMemberEntity referrersOn ProjectMemberTable.projectId
}
object ProjectMemberTable : UUIDTable("tmp_project_member") {
val projectId = registerColumn("project_id", UUIDColumnType())
.references(ProjectTable.id)
}
class ProjectMemberEntity(id: EntityID<UUID>) : UUIDEntity(id) {
companion object : UUIDEntityClass<ProjectMemberEntity>(ProjectMemberTable)
var projectId by ProjectMemberTable.projectId
}
class Bug : BaseIntegrationTest() {
@Test
fun `eager load bug`() = integrationTest {
transaction {
try {
SchemaUtils.create(ProjectTable, ProjectMemberTable)
val project = ProjectEntity.new { }
ProjectMemberEntity.new {
projectId = project.id.value
}
val b = ProjectEntity.all().first().load(
ProjectEntity::members
) // Crash here
println(b.members)
} finally {
transaction {
SchemaUtils.drop(ProjectTable, ProjectMemberTable)
}
}
}
}
}
it's a copy paste of my tests case, but I think should be able to adapt pretty easy, didn't know about the Schemautils.create/drop
, very useful 👌minivac
06/04/2024, 5:02 PMDaoEntity
class org.jetbrains.exposed.dao.DaoEntityID cannot be cast to class java.util.UUID (org.jetbrains.exposed.dao.DaoEntityID is in unnamed module of loader 'app'; java.util.UUID is in module java.base of loader 'bootstrap')
minivac
06/04/2024, 5:06 PM0.51.1I am on 0.51.0, let me bump just to make sure
minivac
06/04/2024, 5:07 PMChantal Loncle
06/04/2024, 9:10 PM