Имеется:
БД имена колонок которых редактировать нельзя. 2 сущности: Room
и File
@Table(name = "FILE_TABLE")
@Entity(name = "exm_File")
open class File : BaseStringIdEntity() {
@Id
@Column(name = "FILE_ID", nullable = false)
var fileId: String? = null
...
override fun getId() = fileId
override fun setId(id: String?) {
fileId = id
}
}
@Table(name = "ROOM_TABLE")
@Entity(name = "exm_Room")
open class Room : BaseStringIdEntity() {
@Id
@Column(name = "ROOM_ID", nullable = false)
var roomId: String? = null
@JoinTable(
name = "ROOM_FILE_TABLE",
joinColumns = [JoinColumn(name = "ROOM_ID")],
inverseJoinColumns = [JoinColumn(name = "FILE_ID")]
)
@ManyToMany
var files: MutableList<File>? = mutableListOf()
override fun getId() = roomId
override fun setId(id: String?) {
roomId = id
}
...
}
тк файлов в комнате может быть достаточно много мы не добавляем это поле во view
чтобы не грузить сразу все файлы и в экране редактирования добавляем отдельную коллекцию:
<collection id="filesDc" class="...File" view="file-view">
<loader id="filesDl">
<query>
<![CDATA[select f from exp_Room r join r.files f where r.roomId = :roomId]]>
</query>
</loader>
</collection>
при таком query
появляется ошибка:
Exception Description: Problem compiling [select tempEntityAlias from exm_File tempEntityAlias, exm_Room r join r.files f where (r.roomId = :roomId) and (tempEntityAlias.id = f.id)].
[124, 142] The state field path ‘tempEntityAlias.id’ cannot be resolved to a valid type.
[145, 149] The state field path ‘f.id’ cannot be resolved to a valid type.
Как видно сгенерилась новая jpql в которой файлы пытаются сравнить по id
. Xотя в классе Файлов прописано, что колонка с ключами называется roomId
. Скорее всего это баг.
Как временное решение я явно подставил сгенерированную jpql
в экран с нужными ключами:
<![CDATA[select tempFile from exm_File tempFile, exm_Room r join r.files f
where (r.roomId = :roomId) and (tempFile.fileId = f.fileId)]]>